2008-09-08 7 views
6

मैं कुछ प्रोग्राम स्वचालित करने के लिए WScript का उपयोग कर रहा हूं, बाहरी प्रोग्राम को कॉल करने के लिए WScript.Shell का उपयोग करके।WScript.Shell और निष्पादन अवरुद्ध?

हालांकि, अभी यह बाहरी प्रोग्राम को समाप्त करने की प्रतीक्षा नहीं करता है, और इसके बजाय आगे बढ़ता है। इससे मुद्दों का कारण बनता है क्योंकि मेरे पास पहले कुछ खत्म करने वाले लोगों पर निर्भर कुछ कार्य हैं। की तरह कोड

मैं उपयोग कर रहा हूँ:

ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir 

Set wshShell = WScript.CreateObject("Wscript.Shell") 
wshShell.run ZipCommand 

इस खोल निष्पादित कार्यक्रम रिटर्न जब तक तो यह ब्लॉक करने के लिए एक तरीका है?

उत्तर

5

यदि आप "एक्ज़ेक" विधि का उपयोग करते हैं, तो यह एक संदर्भ देता है, ताकि आप "स्थिति" संपत्ति को पूरा कर सकें जब यह पूरा हो जाए।

Dim WshShell, oExec 
Set WshShell = CreateObject("WScript.Shell") 

Set oExec = WshShell.Exec(ZipCommand) 

Do While oExec.Status = 0 
    WScript.Sleep 100 
Loop 
+3

रन() के बजाय Exec() का उपयोग करने का एक लाभ यह है कि आप StdOut और StdErr तक भी पहुंच सकते हैं। यदि आपको इसकी परवाह नहीं है, हालांकि, रन() सरल है। –

13

बाहर कर देता है, कि जब तक पाश गंभीर सीपीयू हॉग है:

ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir 

Set wshShell = WScript.CreateObject("Wscript.Shell") 

wshShell.Run ZipCommand,1,1 

पिछले दो तर्क शो विंडो हैं: पी

मैं एक बेहतर रास्ता मिल गया यहाँ msdn से एक नमूना है और ब्लॉक निष्पादन :)