2010-03-19 10 views
7

हमारी टीम हाल ही में एक विशेष समस्याग्रस्त कुंजी को संशोधित करने के लिए उपयोगकर्ताओं को एक मामूली रजिस्ट्री फिक्स को हल करने पर विचार कर रही है। बहुत सीधी चीजें, रजिस्ट्री के अंदर 1 कुंजी/मान अपडेट करने की आवश्यकता है।हाथ से एक एमएसआई पैच (.msp) बनाना?

तो फिलहाल, हम उत्पाद के लिए .msi इंस्टॉलर बनाने के लिए Wix का उपयोग कर रहे हैं। पैच फ़ाइलें .msp पैदा करने के लिए Wix के समर्थन में देखते हुए ऐसा लगता है कि एक ही रास्ता कोई .MSP बनाने के लिए करने के लिए कुछ हद तक एक overcomplicated बहु-चरण प्रक्रिया है:

  1. मूल एमएसआई की कॉपी प्राप्त करें, और एक संकलन/की फोटो के बाद तय एमएसआई
  2. की नई प्रति एक नया Wix फ़ाइल है कि दोनों संस्थापक की ओर इशारा करता
  3. संकलित करें Wix एक .psp
  4. भागो मशाल/से पहले खत्म करने के लिए Pyro मोमबत्ती के साथ एक .wixobj में दाखिल लिखें मूल इंस्टॉलर और .psp, या वैकल्पिक रूप से MsiMsp.exe
का उपयोग कर

अब मेरा सवाल है, क्या मैं बस एक विक्स फ़ाइल में रजिस्ट्री परिवर्तन का वर्णन नहीं कर सकता और सीधे इसे चरण 1 और 4 के बिना .msp में संकलित नहीं कर सकता - जो कि एक साधारण परिवर्तन के लिए बहुत अधिक प्रयास है?

उत्तर

7

नहीं। पैच दो इंस्टॉल करने योग्य छवियों का डेल्टा है। डेल्टा उत्पन्न करने के लिए, भले ही अंतर बहुत छोटा हो, आपको दोनों छवियों की आवश्यकता होगी।

+1

स्पष्टीकरण सही है। आप बस दो छवियों को बनाने के लिए मैन्युअल विधि का वर्णन कर रहे हैं। –

2

ओर्का का उपयोग करके एमएसपी (पैच) और एमएसटी (ट्रांसफॉर्म) बनाना और विंडोज़ इंस्टाल एसडीके से अन्य टूल्स बनाना संभव है (जो अब Windows SDK का हिस्सा है)। हालांकि, यह प्रक्रिया आपके पास पहले से ही वाईएक्स के मुकाबले ज्यादा आसान नहीं हो सकती है।

Here सबसे अच्छा स्पष्टीकरण है जो मुझे गुगलिंग के कुछ मिनटों के साथ मिल सकता है; मुझे अभी भी संदेह है कि वहां कुछ बेहतर होना चाहिए, हालांकि। लेकिन यदि आप विंडोज इंस्टालर प्रारूप से परिचित हैं, तो यह अन्वेषण करना बहुत आसान है और ओर्का के साथ कुछ चीजों को आजमाएं जब तक कि आप इसे लटका न लें।

3

हाँ, वहाँ एक और तरीका है, भले ही आप यह विचार कर सकते हैं उतना ही जटिल:

  1. एक व्यवस्थापक अपना "आधार संस्करण" msiexec /qn /a <msi-file> TARGETDIR=<absolute-path-of-existing-directory> का उपयोग कर (यदि आप एक मेकअप फ़ाइल या अन्य स्क्रिप्ट से इस चलाने के स्थापित कमांड के सामने) में start /wait उपयोग करते हैं, में %BASEDIR%
  2. दोहराने से ऊपर कहते हैं, लेकिन %UPDDIR%
  3. अब आप स्थापना %UPDDIR% अंदर अनपैक किया है कि में, .msi फ़ाइल करने के लिए अपने परिवर्तन है कि जड़ में हो जाएगा बनाने के उस फ़ोल्डर का ... आपको संस्करण संख्या को भी अधिमानतः बदलना चाहिए ...
    • यदि आप फ़ाइलों का आदान-प्रदान करते हैं, तो हैश तालिका (MsiFileHash) या File तालिका को संस्करण जानकारी के साथ अद्यतन करने के लिए सुनिश्चित करें।
    • यदि आप केवल कुछ रजिस्ट्री मान बदलते हैं, तो आपको इनमें से किसी के बिना ठीक होना चाहिए ...
  4. अब एक पंक्ति %UPDIR%
  5. में .msi को UpgradedImages में %BASEDIR% में .msi और एक पंक्ति को TargetImages तालिका में बात करने के लिए आह्वान msimsp.exe <pcp-file> -p <absolute-path-to-desired-patch-file>

एक .pcp (पैच निर्माण गुण) फ़ाइल तैयार वोला, तुम कर चुके हो।

अब यह मूल्यवान है कि यह पूरी तरह से आपके ऊपर निर्भर करता है।

यह है कि मैं कुछ स्क्रिप्ट्स की मदद से ऐसा कर रहा हूं जो एमएसआई डेटाबेस पर एसक्यूएल क्वेरी चलाते हैं ताकि वे मूल्यों को पूछ सकें या आवश्यकतानुसार अपडेट कर सकें। यह पूरी तरह से अच्छी तरह से काम करता है और एमएसआई, व्युत्पन्न एमएसआई, पैच और डमी पैच (परीक्षण के लिए) का पूरा समूह बनाने के लिए एक जीएनयू बनाने की फाइल में डाल दिया गया है।

यहां की चाल डिकंप्रेस्ड व्यवस्थापक छवि को अपरिवर्तित और परिवर्तित संस्करण के अपरिवर्तित और परिवर्तित संस्करण के बीच पैच बनाने के लिए डिकंप्रेस्ड व्यवस्थापक छवि को पैच करना और msimsp.exe को निर्देशित करना है। सब कुछ "हाथ से" करने की आपकी आवश्यकता को फिट करता है।

कुछ स्पष्टीकरण की आवश्यकता होने पर एक टिप्पणी लिखें।

संबंधित मुद्दे