2010-10-19 11 views
12

हम एक आवेदन पत्र (MSI) निम्नलिखित कमांड लाइन विकल्प के साथ MSIEXEC का उपयोग कर स्थापित करें:एमएसआई स्थापित विफल क्योंकि "इस उत्पाद का एक और संस्करण पहले से स्थापित है"

MsiExec.exe /x{code} /qn /liwearucmopvx+ C:\Log\UnInstall.tra 
MsiExec.exe /iC:\Source\App.msi /qn TARGETDIR=C:\Install ALLUSERS=1 /liwearucmopvx+ %C:\Log\Install.tra 

समय इस काम करता है, लेकिन कभी कभी के अधिकांश अनइंस्टॉल विफल रहता है (सुनिश्चित नहीं है कि अभी तक क्यों, त्रुटि में देख रहे हैं)। वैसे भी जब ऐसा होता है तो मुझे पुनः स्थापित करने के दौरान निम्न त्रुटि मिलती है:

Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel 

क्या इसे बाईपास करने का कोई तरीका है? यह सुनिश्चित करने के लिए कि हम हमेशा पुनः स्थापित करते हैं (यदि यह अस्तित्व में है तो हम इसे आसानी से दूर कर सकते हैं?)

+0

आप कर रहे हैं MsiExec कार्यक्रम? या यह प्रश्न कहीं और संबंधित है ;-) –

+0

सुनिश्चित नहीं है कि "इसे प्रोग्राम बनाने" से आपका क्या मतलब है? – Shaitan00

+0

नाम के रूप में stackoverflow (शायद) का मतलब है एक प्रोग्रामर साइट, AFAIK। –

उत्तर

0

अगर अनइंस्टॉलेशन विफल रहता है तो उत्पाद अभी भी सिस्टम पर पंजीकृत होगा - असफलता कहां होती है, इस पर निर्भर करता है कि अनइंस्टॉलेशन रोलबैक होगा , उत्पाद अभी भी स्थापित छोड़ दिया।

यदि आप एक ही उत्पाद कोड के साथ एक उत्पाद को पुनर्स्थापित करने का प्रयास करते हैं लेकिन मौजूदा स्थापना के शीर्ष पर अलग संस्करण MSI शिकायत करेगा, ठीक है, कि उत्पाद अभी भी स्थापित है। यदि आप अपग्रेड व्यवहार प्राप्त करना चाहते हैं तो आपको उत्पाद कोड को बदलने और अपग्रेड टेबल में प्रविष्टियां लिखने की आवश्यकता है ताकि एमएसआई पुराने और नए उत्पादों के बीच भेदभाव कर सके और नए संस्करण के पहले या बाद में पुराने उत्पाद को निकालने के लिए RemoveExistingProducts कार्रवाई का उपयोग कर सके। निर्धारित।

अगर आप समझना चाहते हैं कि स्थापना क्यों विफल रही है, तो आपको लॉग को देखने की ज़रूरत है, आमतौर पर 'वापसी मूल्य 3' की तलाश करें जो एक विफल स्थापना कार्रवाई का हस्ताक्षर है।

8

MSDN Documentation on the Upgrade Table देखें, मूल रूप से आपको msidbUpgradeAttributesVersionMaxInclusive बिट सेट करने की आवश्यकता है।

यदि आप WiX 3.5 का उपयोग कर रहे हैं या बाद में आप MajorUpgrade/@AllowSameVersionUpgrades="yes" का उपयोग कर सकते हैं तो आप अपने इंस्टॉलर को बनाने के लिए क्या उपयोग कर रहे हैं, यह नहीं बताते हैं।

Note that because MSI ignores the fourth product version field, setting this attribute to yes also allows downgrades when the first three product version fields are identical. For example, product version 1.0.0.1 will "upgrade" 1.0.0.2998 because they're seen as the same version (1.0.0). That could reintroduce serious bugs so the safest choice is to change the first three version fields and omit this attribute to get the default of no.

ध्यान दें कि बजाय पैकेज कोड (एक असली दर्द आप सतत एकीकरण स्वचालित रूप से जेनरेट पैकेज कोड का उपयोग कर रहे हैं) याद करने के लिए होने के निम्नलिखित VBScript पैकेज नाम द्वारा सूची खोज के द्वारा निकाल देंगे स्थापित उत्पादों की और पैकेज कोड खुद को ढूँढना।

Option Explicit 
Dim productName, productCode, installer 
productName = "My Application" 

Set installer = Wscript.CreateObject("WindowsInstaller.Installer") 

For Each productCode In installer.Products 
    If InStr(1, LCase(installer.ProductInfo(productCode, "ProductName")), LCase(productName)) Then Exit For 
Next 

If Not IsEmpty(productCode) Then  
    Dim WshShell, oExec 
    Set WshShell = CreateObject("WScript.Shell") 
    Set oExec = WshShell.Exec("msiexec /x " & productCode & " /qb /l*v ""%temp%\UninstallApp.log"" ") 
End If 
+0

इस सेटिंग ने मुझे टेस्ट इंस्टॉलर खुद को ठीक करने में सक्षम है ताकि मैं इसे सफलतापूर्वक अनइंस्टॉल कर सकूं। –

0

प्रश्न अन्य परिदृश्यों के लिए जबकि उपयोगी काफी पुराना है, लेकिन मौजूदा जवाब समस्या और समाधान का सार याद कर रहे हैं: स्थापना रद्द करें विफल रहता है

  1. तो, तो आप एक गंभीर समस्या है , और इसका विश्लेषण करने से कोई बेहतर तरीका नहीं है- अन्यथा आप के बाद और अधिक परेशानी में पड़ सकते हैं।

  2. कम से कम, मैं एक छोटी सी स्क्रिप्ट/प्रोग्राम लिखूंगा, जो अनइंस्टॉल के रिटर्न वैल्यू का उपयोग करता है या यहां तक ​​कि अधिक शक्तिशाली, परीक्षण, यदि एमएसआई अभी भी स्थापित है- इससे पहले कि आप नए एमएसआई को स्थापित करने का प्रयास करें।
    मैं इसमें अधिक रुचि दूंगा, अगर इसमें रुचि है, लेकिन अन्य प्रश्नों में एसओ पर पहले से ही जानकारी है।

  3. कुछ अन्य उत्तरों की सिफारिश है कि आपको मेजर अपग्रेड्स का उपयोग करना चाहिए (कम से कम एक सिफारिश के रूप में, इस परिदृश्य में प्रत्येक नया निर्माण सही मेजर अपग्रेड होना चाहिए/होना चाहिए)। यह एक अच्छी सिफारिश है, लेकिन अगर अनइंस्टॉल "कभी-कभी" विफल हो रही हैं, तो इससे मदद नहीं मिलती है। इसके अलावा यह कहना महत्वपूर्ण है कि, अक्सर, आपके द्वारा उल्लिखित त्रुटि से पता चलता है कि आप पहले से ही प्रमुख उन्नयन का उपयोग नहीं कर रहे हैं। यदि आपको अनइंस्टॉल के साथ वास्तव में कोई समस्या है, तो एक मेजर अपग्रेड समस्याएं बढ़ा सकता है, क्योंकि कॉन्फ़िगरेशन पर निर्भर करता है, यह उत्पाद को दूसरी बार एमएसआई-वार स्थापित कर सकता है और आपके पास दो एमएसआई संदर्भ हैं, अभी भी एक उत्पाद क्या है तुम्हारे लिए। अधिक जानकारी बहुत दूर ले जाएगी। बस याद रखें, एक (हमेशा) काम नहीं कर रहा है या इसके लिए कम से कम एक परीक्षण को आगे अपडेट चरणों से पहले आश्वस्त किया जाना चाहिए।

  4. saschabeaumont से लिपि वास्तव में छोटी और अच्छी है। यह क्या कर रहा है, यह आश्वस्त करना है कि आप वास्तव में सही उत्पादकोड का उपयोग कर रहे हैं। मुख्य जरूरत है, क्योंकि यह हर बार बदलने के लिए है, तो आप एक प्रमुख उन्नयन ... उत्पादन आपके मामले में: इस को हल करती है केवल एक परिदृश्य, क्यों अपने स्थापना रद्द नाकाम रहे हैं सकता है ...

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