2009-11-13 18 views
6

का उपयोग कर एक एप्लिकेशन बंद करना मेरा वाईएक्स इंस्टॉलर बनाने में अपग्रेड स्थापित करने से पहले एप्लिकेशन को बंद करने का प्रयास करते समय मैंने एक समस्या में भाग लिया है। नीचे एक उदाहरण है कि मैं इसे करने का प्रयास कैसे कर रहा हूं।वाईएक्स

<util:CloseApplication Id="CloseServe" CloseMessage="yes" Target="server.exe" ElevatedCloseMessage="yes" RebootPrompt="no"/> 
<InstallExecuteSequence>  
    <Custom Action="WixCloseApplications" After="RemoveExistingProducts" /> 
    <RemoveExistingProducts After="InstallInitialize"/> 
    <Custom Action='LaunchApplication' After='InstallFinalize'/> 
    <!--<Custom Action='StopServer' Before='RemoveExistingProducts'/>--> 
</InstallExecuteSequence> 

इस उदाहरण का उपयोग करके एप्लिकेशन बंद हो जाता है लेकिन इंस्टॉलेशन उस बिंदु पर रुक जाता है और फिर रोलबैक करता है। क्या यह इस तथ्य के कारण हो सकता है कि इसे बंद करने की कोशिश करने से पहले exe हटा दिया गया है? मैंने अनुक्रम को बदलने की कोशिश की है ताकि RemoveExistingProducts WixCloseAplplications के बाद किया जाता है लेकिन फिर मुझे एक त्रुटि कोड 2613 देता है।

+2

यह बढ़िया होगा अगर आप समझाते हैं कि अंत में त्रुटि क्या थी - स्वीकार्य उत्तर केवल इंस्टॉलेशन का लॉग उत्पन्न करने का सुझाव देता है ... –

+0

यह इतना लंबा रहा है कि मैं ईमानदारी से पूर्ण मुद्दे को याद नहीं कर सकता। लॉगिंग ने मुझे इसे ट्रैक करने में मदद की। यह एक अनुक्रम मुद्दा था जहां आप मौजूदा उत्पादों को हटाने से पहले इस फैशन में प्रोग्राम को बंद नहीं कर सके थे, लेकिन यदि आप चल रहे थे तो आप मौजूदा उत्पादों को हटा नहीं सके। एक बूटस्ट्रैपर ने मुझे उस मुद्दे के साथ मदद की। –

उत्तर

7

आप स्थापना लॉगिंग करने का प्रयास कर सकते हैं और देख सकते हैं कि आप वहां से क्या ट्रैक कर सकते हैं। इसलिए जैसे आदेश कंसोल से इंस्टॉलर को चलाने का प्रयास करें:

msiexec.exe /i [msi filename] /log [filepath\logfilename.log] 
0

मुझे लगता है कि आप InstallExecuteSequence में जितनी जल्दी हो सके चल अनुप्रयोग को बंद करने की जरूरत है, और निश्चित रूप से पहले InstallInitialize जो Windows इंस्टालर शुरू होता है लेनदेन जो सिस्टम में परिवर्तन करता है।

इसके अलावा आप चलाना चाहिए एक ही रूप में अच्छी तरह InstallUISequence में आपरेशन ApplicationClose तो आवेदन करते समय स्थापना मेनू के माध्यम से आप चक्र सहभागी बंद कर दिया है। जब आप चुपचाप इंस्टॉल करते हैं तो संपूर्ण InstallUISequence को छोड़ दिया जाता है, इसलिए आपको इसे InstallExecuteSequence में भी चाहिए।

ध्यान रखें कि आप accidentially एक निकास कोड/त्रुटि कोड है कि msiexec.exe एक त्रुटि के रूप में व्याख्या वापस लौट कर रोलबैक ट्रिगर कर सकते हैं एक कस्टम कार्रवाई में। यदि कस्टम कार्रवाई पूर्ण होने के लिए महत्वपूर्ण नहीं है, तो मैं इंस्टॉलेशन जारी रखने की अनुमति देने के लिए त्रुटि जांच बंद कर देता हूं। इस मामले में केवल एक रिबूट की आवश्यकता होगी।

यदि आप बंद करने या बंद करने के लिए कोशिश कर रहे हैं एक सेवा है, एमएसआई अंतर्निहित ServiceControl और ServiceInstall तत्वों (and others) के माध्यम से इस से निपटने के लिए सुविधाओं।