2008-09-19 13 views
5

से एक स्क्रिप्ट फ़ाइल निष्पादित करने के लिए मुझे विंडोज इंस्टालर प्रोजेक्ट (मानक ओओटीबी वीएस 2008 इंस्टॉलर प्रोजेक्ट-वीडप्रोज़) में अन-इंस्टॉल प्रक्रिया के हिस्से के रूप में बैच फ़ाइल निष्पादित करने की आवश्यकता है। कोई भी इंस्टॉलर प्रोजेक्ट में कस्टम क्रियाओं से सीधे बैट फ़ाइल निष्पादित नहीं कर सकता है, इसलिए मैंने आवश्यक बल्ले फ़ाइल को कॉल करने के लिए एक त्वरित vbs स्क्रिप्ट लिखी।
vbs कोड:विंडोज इंस्टालर कस्टम एक्शन

Set WshShell = WScript.CreateObject("WScript.Shell") 
command = "uninstall-windows-serivce.bat" 
msgbox command 
WshShell.Run ("cmd /C " & """" & command & """") 
Set WshShell = Nothing 

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

Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary) 
      MyBase.Uninstall(savedState) 
      'Shell to batch file here 
    End Sub 

और दूसरी बात: क्यों की "स्थापना रद्द करें कस्टम क्रिया"

+0

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

उत्तर

0

अपने संस्थापक कक्षा में भाग के रूप में इस स्क्रिप्ट काम नहीं करता, आप स्थापना रद्द करें विधि अधिभावी हैं बैच फ़ाइल?

0

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

0

विंडोज इंस्टालर स्क्रिप्ट आमतौर पर सिस्टम के रूप में चलती हैं, जब तक आप इसे अन्यथा नहीं बताते। क्या यह संभव है कि आपकी बैच फ़ाइल को इंटरैक्टिव उपयोगकर्ता द्वारा चलाने की आवश्यकता हो?

6

मैं इस एक ही समस्या हुई और मुद्दा है कि आप vbs फ़ाइल के भीतर WScript फोन नहीं कर सकते हैं - आप सिर्फ CreateObject

यानी कॉल करने के लिए की आवश्यकता होगी।

Set WshShell = CreateObject("WScript.Shell") 
command = "uninstall-windows-serivce.bat" 
msgbox command 
WshShell.Run ("cmd /C " & """" & command & """") 
Set WshShell = Nothing 
+3

कारण, जैसा कि मैंने कल खोजा था, यह है कि आपकी वीबीएस फ़ाइल विंडोज स्क्रिप्टिंग होस्ट में होस्ट नहीं की जाती है, लेकिन एमएसआई द्वारा ही। नतीजतन डब्लूएमआई एपीआई उपलब्ध नहीं है। नहीं "WScript"। हालांकि ऐसा लगता है कि WScript पहुंच योग्य है (यानी "WScript.Shell"), यह केवल एक नामस्थान है और ऑब्जेक्ट "WScript" नहीं है। –

+0

WScript.Shell एक COM ऑब्जेक्ट है। यह डब्लूएसएच के माध्यम से एक स्क्रिप्ट चलाने पर उपलब्ध WScript ऑब्जेक्ट जैसा नहीं है। – Cheeso

1

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

0

क्या मेरे लिए काम किया का पूरा पथ निर्दिष्ट करने के लिए था .bat फ़ाइल।

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