wix - एक वाईएक्स कस्टम एक्शन कैसे जोड़ें जो केवल अनइंस्टॉल(एमएसआई के माध्यम से) पर होता है?




windows-installer custom-action (4)

मैं अनइंस्टॉल करने पर पूरी निर्देशिका को हटाने के लिए एक एमएसआई इंस्टॉलर ( WiX के माध्यम से बनाया गया) को संशोधित करना चाहता हूं।

मैं RemoveFile में RemoveFile और RemoveFolder विकल्पों को समझता हूं, लेकिन ये इंस्टॉलेशन के बाद बनाई गई सामग्री वाले पूरे फ़ोल्डर को RemoveFile हटाने के लिए पर्याप्त मजबूत नहीं हैं।

मैंने देखा कि समान स्टैक ओवरफ़्लो प्रश्न वाईएक्स को अनइंस्टॉल करते समय फ़ाइलों को हटा रहा है, लेकिन मैं सोच रहा था कि फ़ोल्डर को हटाने के लिए बैच स्क्रिप्ट को कॉल का उपयोग करके यह अधिक आसानी से किया जा सकता है या नहीं।

यह मेरा पहला समय वाईएक्स का उपयोग कर रहा है, और मुझे अभी भी कस्टम कार्यों का लटका मिल रहा है। एक कस्टम कार्रवाई का मूल उदाहरण क्या होगा जो अनइंस्टॉल करने पर बैच स्क्रिप्ट चलाएगा?


आप इसे एक कस्टम कार्रवाई के साथ कर सकते हैं। आप <InstallExecuteSequence> अंतर्गत अपनी कस्टम कार्रवाई में एक प्रतिबिंब जोड़ सकते हैं:

<InstallExecuteSequence>
...
  <Custom Action="FileCleaner" After='InstallFinalize'>
          Installed AND NOT UPGRADINGPRODUCTCODE</Custom>

फिर आपको अपने <Product> को <Product> अंतर्गत परिभाषित करना होगा:

<Product> 
...
  <CustomAction Id='FileCleaner' BinaryKey='FileCleanerEXE' 
                ExeCommand='' Return='asyncNoWait'  />

जहां FileCleanerEXE एक बाइनरी है (मेरे मामले में एक छोटा सी ++ प्रोग्राम जो कस्टम एक्शन करता है) जिसे <Product> product <Product> अंतर्गत भी परिभाषित किया गया है:

<Product> 
...
  <Binary Id="FileCleanerEXE" SourceFile="path\to\fileCleaner.exe" />

इसके लिए असली चाल कस्टम एक्शन पर Installed AND NOT UPGRADINGPRODUCTCODE , यह पता लगाने के साथ कि आपका एक्शन प्रत्येक अपग्रेड पर चलाया जाएगा (क्योंकि अपग्रेड वास्तव में एक अनइंस्टॉल है, फिर पुनर्स्थापित करें)। यदि आप फ़ाइलों को हटा रहे हैं तो शायद आप नहीं चाहते हैं कि आप उन्नयन के दौरान चाहते हों।

एक तरफ ध्यान दें: मैं सी ++ प्रोग्राम जैसे कुछ करने के लिए कार्रवाई करने के लिए कार्रवाई करने के लिए अनुशंसा करता हूं, क्योंकि बैच स्क्रिप्ट की बजाय यह शक्ति और नियंत्रण प्रदान करता है - और आप "cmd प्रॉम्प्ट" विंडो को चमकते समय रोक सकते हैं आपका इंस्टॉलर चलता है।


बैच स्क्रिप्ट के साथ सबसे बड़ी समस्या रोलबैक को संभालने पर है जब उपयोगकर्ता रद्द करता है (या आपके इंस्टॉल के दौरान कुछ गलत हो जाता है)। इस परिदृश्य को संभालने का सही तरीका कस्टमएक्शन बनाना है जो RemoveFiles तालिका में अस्थायी पंक्तियों को जोड़ता है। इस तरह विंडोज इंस्टालर आपके लिए रोलबैक मामलों को संभालता है। जब आप समाधान देखते हैं तो यह बेहद सरल है।

वैसे भी, अनइंस्टॉल के दौरान केवल एक क्रिया निष्पादित करने के लिए एक शर्त तत्व जोड़ें:

REMOVE ~= "ALL"

~ = कहते हैं केस असंवेदनशील तुलना करें (भले ही मुझे लगता है कि सभी हमेशा uppercaesd है)। अधिक जानकारी के लिए शर्तें सिंटैक्स के बारे में एमएसआई एसडीके दस्तावेज देखें।

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


संपादित करें : शायद नीचे तुरंत जवाब देखें।

यह विषय लंबे समय तक सिरदर्द रहा है। मुझे अंत में यह समझ आ गया। कुछ समाधान ऑनलाइन हैं, लेकिन उनमें से कोई वास्तव में काम नहीं करता है। और निश्चित रूप से कोई दस्तावेज नहीं है। तो नीचे दिए गए चार्ट में कई गुण हैं जिनका उपयोग करने के लिए सुझाव दिया गया है और उनके पास विभिन्न स्थापना परिदृश्यों के लिए मूल्य हैं:

तो मेरे मामले में मैं एक सीए चाहता था जो केवल अनइंस्टॉल पर चलेगा - उन्नयन नहीं, मरम्मत या संशोधित नहीं। उपरोक्त तालिका के अनुसार मुझे उपयोग करना पड़ा

<Custom Action='CA_ID' Before='other_CA_ID'>
        (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>

और यह काम किया!


यलुना के उत्तर के साथ कई समस्याएं हैं, संपत्ति के नाम भी केस संवेदनशील हैं, Installed सही वर्तनी है ( Installed नहीं INSTALLED जाएगा)। ऊपर दी गई तालिका यह होनी चाहिए:

एक पूर्ण मरम्मत और संपत्तियों के वास्तविक मूल्यों को अनइंस्टॉल करने के साथ-साथ यह भी हो सकता है:

वाईएक्स एक्सप्रेशन सिंटेक्स दस्तावेज कहता है:

इन अभिव्यक्तियों में, आप संपत्ति के नामों का उपयोग कर सकते हैं (याद रखें कि वे केस संवेदनशील हैं)।

गुण विंडोज इंस्टालर गाइड (जैसे Installed ) पर दस्तावेज किए गए हैं

संपादित करें: पहली तालिका में छोटे सुधार; स्पष्ट रूप से "अनइंस्टॉल" भी सही होने के साथ ही हो सकता है।