WiX

2010-12-21 24 views
5

में बाद = "InstallValidate" के साथ RemoveExistingProducts से पहले कस्टम क्रिया निष्पादित करने के लिए कैसे मैं इस तरह कुछ है । कुछ पंक्तियों में:WiX

<CustomAction Id="FixStuff" .. /> 

<InstallExecuteSequence> 
    <Custom Action="FixStuff" Before="RemoveExistingProducts" /> 
    <RemoveExistingProducts After="InstallValidate"/> 
</InstallExecuteSequence> 

यह निश्चित रूप से काम नहीं करता है क्योंकि कस्टम क्रिया इंस्टॉल करने से पहले नहीं हो सकती है। मैं वास्तव में InstallValidate और InstallInitialize के बीच मौजूदा उत्पादों को हटाना चाहता हूं, लेकिन मौजूदा उत्पादों को हटाने से पहले मैं फिक्सस्टफ निष्पादित करना चाहता हूं।

क्या ऐसा करना भी संभव है?

उत्तर

6

दुर्भाग्यवश आप अपने वर्तमान कॉन्फ़िगरेशन के साथ RemoveExistingProducts से पहले एक उन्नत कस्टम कार्रवाई नहीं चला सकते हैं।

कुछ संभव दृष्टिकोण होगा:

  1. ले जाएँ RemoveExistingProducts सही InstallFinalize से पहले। यह कस्टम एक्शन समस्या हल करता है, लेकिन अन्य समस्याएं हो सकती हैं क्योंकि इस दृष्टिकोण में कई प्रतिबंध हैं (घटकों को संस्करणों के बीच उनके नाम और GUID को बनाए रखने की आवश्यकता है, आपके कस्टम कार्यों को पता होना चाहिए कि अपग्रेड इंस्टॉलेशन एंड आदि पर किया जाता है)।

  2. एक EXE बूटस्ट्रैपर बनाएं जो नए एमएसआई लॉन्च करने से पहले पुराने इंस्टॉलर को ठीक करता है।

http://msdn.microsoft.com/en-us/library/bb756929.aspx

    इस विधि का उपयोग कर
  1. मरम्मत टूटा एमएसआई:

    • समस्या को ठीक इस bootrapper एक प्रकट के माध्यम से व्यवस्थापक विशेषाधिकार की आवश्यकता होती है सकते हैं पुराने एमएसआई
    • एक बीएटी या EXE बूटस्ट्रैपर बनाएं जो इस आदेश के माध्यम से इसे रिक्त करता है:

    msiexec/fv <path_to_msi>

    • अपने नए पैकेज से पहले एक अद्यतन के रूप में इस MSI वितरित

अपने नए पैकेज RemoveExistingProducts चलता है, पुराने कैश्ड एमएसआई समाधान हो गया होगा और इसे सही ढंग से अनइंस्टॉल करना चाहिए।

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

  • कोई संबंधित समस्या नहीं^_^