2009-11-18 14 views
9

मैं विंडोज इंस्टालर और Wix के बारे में सीख रहा हूँ, और यह कैसे काम करता से संबंधित प्रश्नों की एक संख्या है:,समझौता GUIDs, अद्यतन, और विंडोज इंस्टालर के साथ पैच

  1. तो एक घटक GUID परिवर्तन लेकिन एक ही फाइल घटक में हैं, एक बड़े अपग्रेड पर क्या होता है? क्या फाइलों को बदल दिया जाता है?
  2. यदि किसी उत्पाद से कोई घटक हटा दिया जाता है, तो किसी बड़े अपग्रेड पर संबंधित फ़ाइलों का क्या होता है? मूल फ़ाइलों को अनइंस्टॉल करने पर हटा दिया जाता है?
  3. क्या मैं यह कहने में सही हूं कि एक बड़ा अपग्रेड सभी घटकों में सभी फ़ाइलों को प्रतिस्थापित करेगा, भले ही फ़ाइल का असेंबली संस्करण बदल गया हो, और छोटे अपडेट और मामूली उन्नयन पर, यह केवल एक फ़ाइल को प्रतिस्थापित करता है यदि GUID है वही, और फ़ाइल के असेंबली संस्करण में वृद्धि हुई है? क्या होगा यदि फ़ाइल में असेंबली संस्करण नहीं है, जैसे एएसपीएक्स पेज?
  4. मान लीजिए कि एक निर्माता को बिना किसी इंस्टॉलर के मशीन पर तैनात किया गया था। यदि आपने किसी इंस्टॉलर में एक ही नाम की फ़ाइलों के साथ एक इंस्टॉलर बनाया है, तो इंस्टॉल की गई निर्देशिका में क्या है, तो अगर आपने इंस्टॉलेशन की कोशिश की तो उन फ़ाइलों का क्या होता है? क्या वे बदल गए हैं?
  5. क्या मैं यह कहने में सही हूं कि अगर मैंने निर्देशिका में सभी फ़ाइलों (जैसे किसी वेबसाइट के लिए) के साथ एक एक्सएमएल फ़ाइल बनाने के लिए गर्मी की तरह एक उपकरण का उपयोग किया है, तो आपको GUID को समान रखना होगा (मैन्युअल रूप से या एक स्क्रिप्ट), या आप केवल बड़े उन्नयन करने में सक्षम होंगे?
+0

यह सब बहुत आसानी से परीक्षण किया जाता है। –

उत्तर

4

एक घटक GUID परिवर्तन, लेकिन ही फाइलों घटक में हैं, तो क्या एक प्रमुख उन्नयन पर क्या होता है?

पहला, सवाल यह है कि पुराने घटक को अनइंस्टॉल किया गया है या नहीं। यदि आप अपने उत्पाद के पिछले संस्करणों को अनइंस्टॉल करने के लिए अपने अपग्रेड को कॉन्फ़िगर नहीं करते हैं, तो घटक हटाया नहीं जाएगा (हालांकि इसकी फ़ाइलों को ओवरराइट किया जा सकता है)। प्रश्न 2 का उत्तर भी देखें।

दूसरा, सवाल यह है कि नया घटक स्थापित किया जाएगा या नहीं। एक घटक केवल तभी स्थापित होता है जब इसकी कीपैथ गुम हो। यदि कीपैथ एक संस्करण वाली फ़ाइल है, तो निचला संस्करण भी "गायब" के रूप में गिना जाता है।

अंत में, यदि नया घटक स्थापना के लिए चिह्नित किया गया था, और Windows इंस्टालर को उसी नाम के साथ एक फ़ाइल का सामना करना पड़ता है जिसे वह इंस्टॉल करने का प्रयास कर रहा है, तो File Versioning Rules यह निर्धारित करता है कि फ़ाइल बदल दी गई है या नहीं। उदाहरण के लिए, एक उच्च संस्करण वाला एक फ़ाइल डाउनग्रेड नहीं किया जाएगा।

एक घटक एक उत्पाद से निकाल दिया जाता है, तो क्या एक प्रमुख उन्नयन पर जुड़े फ़ाइलों का क्या होगा? क्या मूल फ़ाइलें पर अनइंस्टॉल करें?

जब तक आप Upgrade table में सही प्रविष्टियों और InstallExecuteSequence कि Windows इंस्टालर बताता पुराने उत्पाद को दूर करने के शब्दों में कहें, पुराने घटकों अकेला छोड़ दिया जाएगा। पुराने संस्करणों को हटाने वाले विक्स में इंस्टॉलर बनाने के तरीके के मार्गदर्शन के लिए एलेक्स शेवचुक द्वारा यह blog post देखें।

Am मैं कह रही है कि एक प्रमुख उन्नयन सभी घटकों में सभी फ़ाइलों का स्थान ले लेगा में सही कर ...

नहीं। यह इस बात पर निर्भर करता है कि पुराना घटक पहले हटा दिया गया था, चाहे नया घटक कुंजीपैथ और फ़ाइल संस्करण नियमों के आधार पर स्थापित किया गया हो।

मान लीजिए कि एक उत्पाद पर एक इंस्टॉलर का उपयोग किए बिना एक मशीन पर तैनात किया गया था। यदि आपने को एक ही नाम के के साथ इंस्टॉलर निर्देशिका में क्या है, के साथ एक इंस्टॉलर बनाया है, तो यदि आप स्थापना की कोशिश करते हैं तो उन फ़ाइलों के साथ क्या होता है?

फिर से, यह इस बात पर निर्भर करता है कि घटकों को उनके कीपैथ और फ़ाइल संस्करण नियमों के आधार पर इंस्टॉल किया गया है या नहीं।

Am मैं कह रही है कि (एक वेबसाइट के लिए की तरह) एक निर्देशिका में सभी फाइलों के साथ एक xml फ़ाइल बनाने के लिए अगर मैं इस्तेमाल किया गर्मी की तरह एक उपकरण है, कि तुम होगा रखने के लिए सही कर GUID समान (मैन्युअल रूप से या किसी स्क्रिप्ट के साथ), या आप केवल बड़े अपग्रेड करने में सक्षम होंगे?

सही। GUID एक घटक की पहचान है, इसलिए यदि आप GUID को बदल देंगे तो वहां दो घटक मौजूद होंगे (आपके उत्पाद के पुराने और नए संस्करण में) जो एक ही संसाधन को उसी लक्ष्य स्थान पर स्थापित करते हैं। और यह नो-नो according to MSDN है: "दो घटक बनाएं जो कभी भी समान नाम और लक्ष्य स्थान के तहत संसाधन स्थापित नहीं करते हैं।"

3

Component Rules जानें। वे तोड़ने के लिए बहुत आसान हैं और विंडोज इंस्टालर उन्हें लागू नहीं करता है। हालांकि यदि आप नियमों का पालन नहीं करते हैं, तो अजीब अजीब वूडू होता है।

आसान समाधान, प्रति घटक एक फ़ाइल के साथ चिपकें और संकलन समय GUID पीढ़ी के साथ heat का उपयोग करें (Guid="*" के साथ आउटपुट एक स्थिर एल्गोरिदम का उपयोग करता है, यह यादृच्छिक नहीं है)। गर्मी उत्पन्न करने के लिए GUIDs यादृच्छिक है, लेकिन संकलन समय पर candle द्वारा उत्पन्न GUID स्थिर होंगे (फ़ाइल नाम + पथ हैश या स्मृति से कुछ)

यदि विंडोज इंस्टालर को इंस्टॉल के दौरान पहले से ही डिस्क पर फ़ाइल मिलती है, तो यह बढ़ेगी उस फ़ाइल के लिए संदर्भ गणना मानते हुए कि यह एक "साझा" फ़ाइल है। एक बार संदर्भ गणना शून्य पर लौटने के बाद फ़ाइलों को डिस्क से हटा दिया जाता है, इसलिए यदि कोई फ़ाइल पहले से मौजूद है, तो गणना कभी शून्य पर वापस नहीं आ सकती है और आप अनइंस्टॉल करने के बाद भी फ़ाइलों को झूठ बोल सकते हैं।

+0

संदर्भ गिनती के बारे में: यह इतना आसान नहीं है। यदि आपके पास दो अलग-अलग घटक हैं जो एक ही फ़ाइल (घटक नियमों का उल्लंघन) स्थापित करते हैं, तो एक घटक को हटाने से फ़ाइल को हटा दिया जाएगा। फ़ाइल में केवल कुछ अतिरिक्त सुरक्षा है यदि उसके पास "sharedllrefcount" है, एक विरासत तंत्र जिसे केवल विंडोज इंस्टालर द्वारा अपडेट किया गया है यदि रीफॉउंट पहले से मौजूद है या यदि यह 'SharedDllRefCount =" Yes "के साथ घटक पर स्पष्ट रूप से सक्षम है। –

+0

सच है, यदि आप घटक नियमों का उल्लंघन करते हैं तो सभी दांव बंद हैं;) – saschabeaumont

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