2009-10-14 12 views
5

के साथ स्थापित एक GUID = "घटक निकालें मैंने कई सर्वरों पर अपने वाईएक्स-आधारित इंस्टॉलर को गड़बड़ कर दिया है ताकि यह अनइंस्टॉल के दौरान फ़ाइलों या घटकों (या अन्य सुविधाओं) को हटा न सके। एमएसआई लॉग से पता चलता है कि उन सभी घटकों पर पिछली पिन = 1 जो अनइंस्टॉल नहीं करेगा।वाईएक्स

मेरे पास साझा डेल गिनती या यहां तक ​​कि विभिन्न इंस्टॉलरों के बीच साझा घटकों का उपयोग करने जैसी कुछ भी फैंसी नहीं है।

मुझे लगता है कि मैंने इसे अपने वाईएक्स कोड के एक विशेष संशोधन के लिए ट्रैक किया है। मैंने कुछ बेवकूफ चीजें कीं। मैं (अनजाने) एक खाली Guid

<Component Id="file.ext" Guid=""> 
    <File .../> 
<Component> 

के साथ एक अप्रबंधित घटक बनाया है और मैं भी एक और घटक की फ़ाइल स्थान और ID (GUID नहीं बल्कि यह है) बदल दिया है। पिछले संशोधन में मौजूद सभी घटक पहले पिन किए गए = 1 दिखाएंगे और अनइंस्टॉल नहीं करेंगे, और इस संशोधन के बाद नए घटक जोड़े गए हैं/सही तरीके से अनइंस्टॉल करें।

मैं अपने इंस्टॉलर को वापस सामान्य कैसे प्राप्त कर सकता हूं और इन पहले पिन किए गए घटकों को हटा सकता हूं?

उत्तर

5

विंडोज इंस्टालर वास्तव में खाली GUID की अवधारणा का समर्थन करता है। इसका मतलब है "इंस्टॉल करें, लेकिन घटक पंजीकृत न करें": http://msdn.microsoft.com/en-us/library/aa368007(VS.85).aspx (घटक आईडी प्रविष्टि बताती है कि शून्य शून्य के साथ क्या होता है)।

मैंने अभी WIX के साथ परीक्षण किया है और ऐसा लगता है कि यह एक खाली GUID प्रविष्टि का सम्मान करता है (यानी कोई guid स्वतः उत्पन्न नहीं होता है)। निरपेक्ष पथ के बीच 1 नियम/कुंजी पथ और GUID:

  • आप GUID बदलते हैं, तो एक नया निरपेक्ष पथ घटक कुंजी पथ के लिए इस्तेमाल किया जाना चाहिए 1 याद रखें।
  • यदि आप पूर्ण पथ बदलते हैं (उदाहरण के लिए फ़ाइल का नाम बदलकर, या इसे स्थानांतरित करके), तो आपको GUID बदलना चाहिए।

सारांश में, GUID संदर्भ-मायने रखता है घटक के प्रमुख मार्ग, नहीं फ़ाइल को स्थापित - जो स्थानांतरित कर सकते हैं, लेकिन फिर फ़ाइल (एक नई GUID के माध्यम से एक नई पहचान में ही नाम के दो फ़ाइलों के बारे में सोच है विभिन्न फ़ोल्डर्स - वे अलग-अलग फाइलें हैं, अलग-अलग पहचानें हैं)।

गड़बड़ की सफाई GUID संदर्भ गिनती थोड़ा गन्दा हो सकती है। मुझे लगता है कि अगर मैं फ़ाइल नाम बदल सकता हूं जो प्रभावी रूप से समस्या को हटा देता है। मैं एक नया गाइड भी उत्पन्न करता हूं और इसलिए पुराने गाइड की रेफ गिनती के लिंक को तोड़ देता हूं। आप स्थापना फ़ोल्डर का नाम भी बदल सकते हैं (जिसका आदर्श अर्थ यह होगा कि सभी घटक GUID को भी बदला जाना चाहिए)। RemoveFile तालिका अवधारणा का उपयोग फ़ाइलों को हटाने और/या अनइंस्टॉल करने के लिए किया जा सकता है जो घटक के रूप में पंजीकृत नहीं हैं (उदाहरण के लिए जेनरेट की गई फाइलें)।

+0

जो मैंने आपको सुना है वह यह है कि, चूंकि एक खाली GUID एक घटक भी पंजीकृत नहीं करता है, इसका अन्य घटकों पर कोई प्रभाव नहीं होना चाहिए। क्या वह सही है? –

+0

हां, आम तौर पर रिक्त GUID को अन्य घटकों पर कोई प्रभाव नहीं होना चाहिए क्योंकि फ़ाइल इंस्टॉल करने के बाद एमएसआई इसे अनदेखा करता है। हालांकि, संशोधनों के बिना शायद ही कभी एक तथ्य: रिक्त GUID द्वारा स्थापित फ़ाइल को अनइंस्टॉल नहीं किया जाएगा। यदि यह एक संस्करण फ़ाइल है, और आप एक guid वापस जोड़ने से पहले इंस्टॉल स्थान नहीं बदलते हैं, तो यह सैद्धांतिक रूप से संभव है कि मौजूदा फ़ाइल नए फ़ाइल संस्करण (यदि मौजूदा फ़ाइल एक उच्च संस्करण है) को स्थापित कर सकती है। यदि आप मामूली उन्नयन का उपयोग करते हैं तो कुछ अन्य संभावित परिदृश्य भी हैं, लेकिन यदि आप इसका उपयोग नहीं करते हैं तो मैं इसमें नहीं जाऊंगा। –

+0

आपके विस्तृत उत्तर के लिए धन्यवाद! अंत में सभी को ठीक से अनस्टॉल करने के लिए (एमएसआई लॉग से पिछली पिन = 1 संदर्भों को हटाने) के अंत में, मुझे उस पीसी पर रजिस्ट्री में जाना था और HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Microsoft \ Windows \ के तहत मेरे इंस्टॉलर से सभी घटकों को हटा देना था। CurrentVersion \ Installer \ UserData \ \ यहां मिली टिप के आधार पर घटक http://blogs.msdn.com/icumove/archive/2008/06/17/windows-installer-error-2908-with-sub-errors- 1402-और -1450.aspx –

0

घटक की आईडी बदलना और वैध GUID का उपयोग करना चीजों को सही बनाना चाहिए।

+0

मैं "चीजों को सही बनाने" की उम्मीद कर रहा था, जिसका मतलब था कि आप सभी पिछली पिन = 1 घटकों को अनइंस्टॉल करने की अनुमति दे रहे थे। ऐसा तब नहीं हुआ जब मैंने इसे बदल दिया। –

+0

यह उत्तर इस संदर्भ में समझ में नहीं आता है। GUIDs के साथ घटकों का उपयोग करना सामान्य तरीका है, लेकिन यहां विषय GUID के बिना घटक हैं। – Philm

0

संक्षिप्त उत्तर है:

हाँ, GUIDs बिना एमएसआई घटकों का उपयोग एक बैच प्रतिलिपि विधि की तरह है। कॉपी और भूल जाओ। बेशक आपको एक ही चीज़ जोड़नी है: प्रत्येक ओवरइंस्टॉल या अनइंस्टॉल करने से पहले सभी फ़ाइलों को हटा देना (स्थिति "रीस्टस्टॉल या पैच या रिमूव") या मेजर अपग्रेड। इसके बिना, यह वास्तव में समझ में नहीं आता है। आप इसे सीएमडी.एक्सई/सी आरडी/एस/क्यू के साथ भी कस्टम कार्रवाई में कर सकते हैं .... (बेशक, कस्टम कोड इस से अधिक सुरुचिपूर्ण है)

यदि आप इसे सही करते हैं, तो आप सामान्यतः एमएसआई के सभी जाल के बिना काफी सरल सेटअप कर सकते हैं। बेशक यह आसान है, अगर आप पूरी तरह से एक संपूर्ण निर्देशिका को हटाते हैं जो फ़ाइल-दर-फ़ाइल है।

अभी तक कोशिश नहीं की है, लेकिन मैं: GUID और सामान्य घटकों के बिना "गतिशील" घटक होने और फिर एक पैच प्रदान कर रहा हूं। सैद्धांतिक रूप से यह काम करना चाहिए और यह पैच के बीच अत्यधिक बदलती फ़ाइल सेट के परिणामस्वरूप कई पैचिंग समस्याओं के लिए एक अच्छा कामकाज होगा।

0

1. वास्तव में, GUID के बिना घटक वास्तविक "गतिशील-फ़ाइल-लिंकिंग" विधि अक्सर कई टूल या व्यक्तियों द्वारा गलत तरीके से प्रशंसित होते हैं।

अन्य "तरीके": 2. उत्पन्न GUIDs स्वचालित रूप से सिर्फ एक स्वचालन कदम है (लेकिन हर अच्छे सेटअप निर्माण के बुनियादी ढांचे :-) मेरी आँखों में इस गतिशील रूप से नहीं है, क्योंकि अगर आप यह गतिशील बनाने के पाठ्यक्रम भाग की, आप इसे गलत करते हैं:

2 ए। GUID उत्पन्न करना जो प्रत्येक बार => गलत एल्गोरिदम

2b। जीयूआईडी उत्पन्न करना केवल पहली बार एक घटक बनाया गया है और नए संसाधनों के लिए बुद्धिमान "diff" मान्यता लागू करने के लिए नए घटक => केवल काम करने वाली फ़ाइल-पेड़-सिंक विधि में पैक किया जाना है। लेकिन आप यहां बहुत गलत कर सकते हैं ... यह विशेषज्ञों के लिए है।