2009-06-03 15 views
5

मैं निम्नलिखित समस्याग्रस्त परिदृश्य है:msiexec शांत स्थापना जब पैकेज पहले से स्थापित है

समस्याग्रस्त Scenrio विवरण शुरू ---------------------- -----

मैं निम्नलिखित तरीके से चुप मोड में एक पैकेज स्थापित करने के लिए msiexec का उपयोग करें:

msiexec /i c:\mypackage.msi /quiet 

अब मैं पैकेज स्थापित किया है।

msiexec /i c:\mypackage.msi /quiet 

समस्याग्रस्त Scenrio विवरण समाप्ति ---------------------------

: चलो मैं आदेश को फिर से ऊपर दर्ज किए गए मान लीजिए

अब जब से पैकेज पहले से स्थापित है, स्थापना विफल होनी चाहिए। लेकिन मुझे इसके लिए कोई संकेत नहीं है।

मैं क्रम में लॉग विकल्प का उपयोग एक लॉग चलते रहने के लिए:

msiexec /i c:\mypackage.msi /quiet /l* log.txt 

जब त्रुटियां होती हैं मैं उन्हें लॉग में लेकिन लॉग ऊपर दर्शाया परिदृश्य में देख पा रहे हैं खाली है। सिस्टम इवेंट लॉग में कुछ भी लिखा नहीं गया है। तो मेरा सवाल यह है कि, मैं एक संकेत कैसे प्राप्त कर सकता हूं कि स्थापना (दूसरा वाला) नहीं गया?

नोट्स:

मैं एक बैच स्क्रिप्ट है कि पैकेज कॉल msiexec करने से पहले स्थापित किया गया है अगर जाँच करेगा लिख ​​कर इस समस्या को हल करने के लिए तैयार नहीं हूँ। कारण यह है कि यह हमारे ग्राहक परिनियोजन आवश्यकताओं के विपरीत है।

मेरे पास एक डीएलएल कस्टम एक्शन डेटा है, दूसरी बार, डीएलएल सक्रिय नहीं है इसलिए मैं कहीं विफलता लिखने के लिए डीएलएल का उपयोग नहीं कर सकता।

उत्तर

1

क्या यह आपका पैकेज है? यदि ऐसा है, तो एक शर्त शर्त डालें जो जांचता है कि कुछ महत्वपूर्ण फ़ाइल या रजिस्ट्री प्रविष्टि अभी तक मौजूद नहीं है।

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

+0

मैं इस पूर्व शर्त की कोशिश कर सकता हूं – user88637

5

स्थापना में विफल नहीं हुआ पैकेज पहले से स्थापित है, तो यह था

"सफलतापूर्वक पुन: कॉन्फ़िगर" आदेश अगर एक Windows इंस्टॉलर पैकेज या नहीं सिस्टम पर स्थापित किया गया है की जाँच करने के लिए आपको सबसे अच्छा विंडोज उपयोग करने वाले हैं एसडीके (बैच फ़ाइल नहीं) - यहां एक नमूना स्क्रिप्ट है जो स्थापित उत्पादों की सूची को पुन: सक्रिय करती है और MSIEXEC को ट्रिगर करती है यदि यह पहले से इंस्टॉल नहीं है। (इस उदाहरण नाम से खोज करता है, वैकल्पिक रूप से आप पैकेज कोड द्वारा खोज सकते हैं)

Option Explicit 

Dim productName:productName = "My Awesome Product" 

Dim installer : Set installer = Nothing 
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") 

Dim productCode, property, value, message 

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

If IsEmpty(productCode) Then 
    Dim WshShell, oExec 
    Set WshShell = CreateObject("WScript.Shell") 
    WshShell.Exec("msiexec /i mypackage.msi /qb") 
Else 
    Wscript.Echo productName & " is already installed." 
    Wscript.Quit 2 
End If 
0

मैं जानता हूँ कि इस पुराने धागा है, लेकिन गूगल इस हिट और अन्य लोगों के लाभ में इस

start /wait msiexec /i c:\mypackage.msi /quiet 

प्रयास करते हैं तो त्रुटि , echo %errorlevel% शून्य नहीं होगा। यदि प्रोग्रामिंग के ऊपर कॉलिंग GetLastError()

+0

-1: त्रुटि पर - हाँ। मैं शर्त लगाता हूं कि यह 'प्रारंभ/प्रतीक्षा' भाग के बिना भी nonzero होगा।समस्या यह है कि ** पहले से स्थापित पैकेज स्थापित करने का प्रयास करते समय ** कोई त्रुटि नहीं है, और सवाल यह है कि ** उस मामले का पता कैसे लगाएं **। – quetzalcoatl

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