2012-06-04 17 views
5

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

Microsoft VBScript runtime error: object required: 'WScript', Line 3, Column 2 

स्क्रिप्ट नीचे है:

sub shell(cmd) 
    Set objShell = WScript.CreateObject("WScript.Shell") 

    objShell.Run("""" & cmd & """") 
    Set objShell = Nothing 
end sub 

set objFSO = CreateObject("Scripting.FileSystemObject") 

strcmd32 = "C:\Path\PathToExecutable.exe" 
strcmd64 = "C:\Path\PathToExecutable64.exe" 

if (objFSO.FileExists(strcmd32)) then 
    shell(strcmd32) 
else 
    shell(strcmd64) 
end if 

set objFSO = Nothing 

जैसा कि पहले बताया गया है, यह स्क्रिप्ट ठीक चलती है अगर मैं इसे इंस्टॉलर के संदर्भ से बाहर चलाता हूं। सेटअप प्रोजेक्ट प्रकार VS2010 सेटअप और परिनियोजन पैकेज है (यह वही है जो ग्राहक उपयोग करना चाहता है और मैं किसी और चीज का उपयोग नहीं कर सकता)। कोई विचार?

उत्तर

7

"खोल" सब में, मैंने "CreateObject()" पर कॉल से पहले पहली पंक्ति से WScript को हटा दिया। संशोधन लाइन अब इस तरह दिखता है:

'Note the absent reference to WScript on the call to CreateObject() 
Set objShell = CreateObject("WScript.Shell") 
+0

WScript ऑब्जेक्ट्स एक कस्टम कार्रवाई के रूप में चल रहे वीबीएस फ़ाइलों में समर्थित नहीं हैं। यदि आपको कभी भी इस प्रकार की वस्तु का उपयोग करने की आवश्यकता है तो उपर्युक्त विधि केवल एक ही काम कर रही है। एक और पक्ष, वीबीएस कस्टम क्रियाएं मेरी पहली सिफारिश नहीं हैं, लेकिन यह सब उस समय पर निर्भर करता है जब आप सेटअप पैकेज बनाने के लिए उपलब्ध हैं। वीबीएस कस्टम क्रियाएं कई जोखिमों के साथ आती हैं, जैसे एंटीवायरस अवरोधन या बनाम इंजन कई अन्य विफलताओं को विफल करता है। एक कस्टम कार्रवाई के लिए एक Win32 DLL सबसे अच्छा विकल्प होगा। –

+0

असल में, मेरे पास यह स्क्रिप्ट है, फिर मर्ज मॉड्यूल के अंदर शामिल शॉर्टकट बनाने के लिए एक और स्क्रिप्ट (सेटअप और परिनियोजन परियोजनाएं मर्ज मॉड्यूल के भीतर फ़ाइलों से लिंक करने की क्षमता प्रदान नहीं करती हैं), और एक स्क्रिप्ट जो हटाती है अनइंस्टॉल करने पर शॉर्टकट्स । मैं समय बचाने के लिए vbs मार्ग चला गया क्योंकि मेरे पास कस्टम एक्शन डीएलएल बनाने का तरीका जानने के लिए समय नहीं है। –

3

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

अब यह आसान हिस्सा आता है कि आप पूरी तरह से अपने कस्टम कार्यों से छुटकारा पा रहे हैं, शॉर्टकट बनाने के लिए आप फ़ाइलें और फ़ोल्डर्स पेज पर जा सकते हैं और संदर्भ मेनू विकल्प या टूलबार का उपयोग कर सकते हैं, आप external shortcut बना सकते हैं, जो आप मर्ज मॉड्यूल से फ़ाइल को इंगित करने के लिए कॉन्फ़िगर कर सकते हैं, या यहां तक ​​कि पैकेज से भी नहीं।

इस तरह आप एक बहुत क्लीनर सेटअप पैकेज बना सकते हैं, बहुत आसान और अपने कस्टम कार्यों में विफल होने की संभावना के बारे में चिंता करने की ज़रूरत नहीं है।

+1

अच्छी सिफारिश, लेकिन मेरा ग्राहक सेटअप और परिनियोजन प्रोजेक्ट का उपयोग करना चाहता है क्योंकि उसकी टीम उससे परिचित है। और अगर मेरी पसंद थी, तो शायद मैं वाईएक्स का उपयोग करूँगा क्योंकि यही वह है जिसे मैं परिचित हूं। –

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