2009-03-31 20 views
5

पर नई फ़ाइल जोड़ें मेरे पास एक साझा डीएल है, हम इसे कई उत्पादों द्वारा स्थापित Utility.dll को कॉल करेंगे। मेरी WIX फ़ाइल में मैं Utility.dll को एक अलग घटक के रूप में स्थापित करता हूं। अब Utility.dll का संस्करण 2.0 एक अतिरिक्त डीएल संदर्भित करता है, UtilityUtility.dll जिसे साथ में स्थापित करने की आवश्यकता होगी।WIX साझा घटक

UtilityUtility.dll को एकीकृत करने के अपने पहले प्रयास के लिए मैंने एक नया WIX घटक बनाया जिसमें नया डीएलएल था।

यह इस परिदृश्य में समस्याओं का कारण बनता

1) उपयोगकर्ता को स्थापित करता है उत्पाद 1 {Utility.dll 1.0}
2) उपयोगकर्ता को स्थापित करता है उत्पाद 2 {Utility.dll 2.0, UtilityUtility.dll 2.0}
3) उपयोगकर्ता उत्पाद 2 {Utility.dll 2.0}

द्वारा अनइंस्टॉल अब जब कोई उपयोगकर्ता Utility.dll का उपयोग करता है यह असफल हो जायेगी जब यह संदर्भित UtilityUtility.dll

यह मेरे लिए UtilityUtility.dll जोड़ने के लिए नेतृत्व नहीं मिल सकता है मूल घटक जो यूट को रोकता है ilityUtility.dll को पिछले परिदृश्य में हटाए जाने से ही अपने स्वयं के मुद्दे के साथ आता है।

1) उपयोगकर्ता को स्थापित करता है उत्पाद 1 {Utility.dll 1.0}
2) उपयोगकर्ता को स्थापित करता है उत्पाद 2 {Utility.dll 2.0, UtilityUtility.dll 2.0}
3) उपयोगकर्ता द्वारा अनइंस्टॉल उत्पाद 2 {Utility.dll 2.0, UtilityUtility .dll 2.0}
4) उपयोगकर्ता द्वारा अनइंस्टॉल उत्पाद 1 {UtilityUtility.dll 2.0}

UtilityUtility.dll के रूप में यह उत्पाद 1 की स्थापना रद्द करें द्वारा हटाया नहीं प्राप्त करता है अनाथ है (यह घटक में मौजूद नहीं था जब यह मूल रूप से था स्थापित)।

क्या मेरे पास कोई अन्य विकल्प है?

धन्यवाद

उत्तर

3

जब तक आप उत्पाद 1 अपडेट नहीं कर सकते (जो मुझे लगता है कि पूरी तरह से संभव नहीं है), मुझे लगता है कि आप खराब हैं। आईएमएचओ, घटक नियम विंडोज इंस्टालर के बारे में सबसे बुरी चीज हैं। यह link to an old blog post of mine इसमें से अधिकतर बताता है। आपका केस वहां वर्णित की तुलना में थोड़ा अलग है लेकिन परिणाम अपेक्षित हैं।

मुझे लगता है कि आपको कम से कम दो बुराइयों को चुनना है।

+0

पहले परिदृश्य के साथ REINSTALLMODE = a (या amus) का उपयोग कर उत्पाद 2 की अनइंस्टॉल के बाद उत्पाद 1 की पुन: स्थापना/मरम्मत की स्थिति की मरम्मत होगी? मेरे पास कुछ हद तक समान परीक्षण प्रोजेक्ट है और ऐसा लगता है कि मरम्मत v2 –

+0

के साथ v2 DLL को प्रतिस्थापित करती है हां, REINSTALLMODE = के साथ उत्पाद 1 की मरम्मत करना मशीन पर उस पैकेज में सभी फ़ाइलों को मजबूर करेगा, संभावित रूप से किसी भी अन्य साझा फ़ाइलों को तोड़ देगा। "ए" स्विंग करने के लिए एक बहुत क्रूर हथौड़ा है। –

+3

पोस्ट रॉब घटक नियमों के बारे में बताता है, मुझे विश्वास है, http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101 पर ले जाया गया है – adamjcooper

0

क्या आप दूसरी समस्या का पुनरुत्पादन कर सकते हैं? उत्पाद 2 घटक संस्करण स्थापित करने के बाद सिद्धांत में 2.0 बन जाता है। चरण 3 घटक संस्करण के बाद भी 2.0 है। जब उपयोगकर्ता चरण 4 में उत्पाद 1 को अनइंस्टॉल करता है तो Windows इंस्टालर जानता है कि Utility.dll 2.0 और UtilityUtility.dll 2.0 दोनों को कैसे निकालें।

अद्यतन: मैं गलत था, क्षमा करें।

+0

@ पावेल विंडोज इंस्टालर में "घटक संस्करण" जैसी कोई चीज़ नहीं है। ऊपर वर्णित व्यवहार वह है जो मैं उम्मीद करता हूं। –

+0

मेरे पास एक रेपो है। – user38309

1

मैं 100% निश्चित नहीं हूं ... लेकिन मुझे लगता है कि मूल घटक में दूसरा डीएलएल जोड़ना संभवतः घटक नियमों का "उल्लंघन" है। एक नज़र डालें: http://blogs.msdn.com/robmen/archive/2003/10/18/56497.aspx

जो मैं विक्स भीड़ से इकट्ठा करता हूं उससे अग्रणी "सर्वोत्तम अभ्यास" प्रत्येक फ़ाइल को एक व्यक्तिगत घटक के रूप में रखना है।

उन्नयन के लिए आपकी क्या योजनाएं हैं (एमएसआई शब्दों में: प्रमुख, मामूली, पैच)? अगर मुझे याद है कि मामूली उन्नयन को घटक परिभाषाओं के साथ मक करने की अनुमति नहीं है। पैच के बारे में कोई जानकारी नहीं है।

आप मरम्मत के बारे में भी चिंता करना चाहेंगे।

+0

मुझे अपने स्वयं के घटक में दूसरा डीएल होना पसंद है, लेकिन मुझे इसे पहले परिदृश्य चरण 3 में हटाए जाने से रोकने की आवश्यकता है। मैं बड़े उन्नयन करने की योजना बना रहा हूं। – user38309

+0

@समरगोट: मुझे लगता है कि आप भाग्य से बाहर हो सकते हैं (रॉब मेन्शिंग टिप्पणी देखें)। आप विक्स मेलिंग सूची पर पूछना चाहेंगे ... वे विंडोज इंस्टालर के बारे में उपयोगी और गहराई से जानकार होते हैं (यह वास्तव में एक विक्स प्रश्न नहीं है ... लेकिन एक विंडोज इंस्टालर प्रश्न)। – user53794

0

मैंने स्वयं इस समस्या में भाग लिया है। मैं @ आरबीबी से सहमत हूं और मैं आगे यह तथ्य प्रस्तुत करता हूं कि आप इस टूटे हुए उपयोगकर्ता परिदृश्य को कल्पना कर सकते हैं यह प्रमाण है कि आप नियमों का उल्लंघन कर रहे हैं। आपको केवल एक साझा घटक अपडेट करना चाहिए यदि यह पूरी तरह से और पूरी तरह से संगत है। यदि डक 2.0 क्वाक या तैरता नहीं है, तो इसके लिए एक नया नाम बनाएं।

आपके मामले में, आपके पास Utility.dll 1.0 और Utility.dll 2.0 है, लेकिन वे केवल "समान घटक" हैं कि वे एक ही तरीके से समान चीजें करते हैं। Utility.dll 2.0 को वास्तव में UtilityPlus.dll 1.0 कहा जाना चाहिए।

क्षमा करें, मुझे पता है कि शायद यह वह जवाब नहीं है जिसे आप सुनना चाहते थे, लेकिन इंजीनियरिंग केस स्पष्ट है।