2008-09-08 24 views
6

Bazı programları otomatikleştirmek için, harici programları çağırmak üzere WScript.Shell'i kullanarak WScript kullanıyorum. Ancak, şu anda harici programın bitmesini beklemiyor ve bunun yerine devam ediyor. Bu, sorunlara neden oluyor çünkü bazı işleri ilk bitiren diğerlerine bağlıyım. gibiWScript.Shell ve engelleme yürütmesi?

kullanıyorum kodu:

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

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

kabuk uygulanan program dönene kadar bu nedenle blok bunu yapmanın bir yolu var mı?

cevap

5

"Exec" yöntemini kullanırsanız, bir başvuru döndürür, böylece "Status" özelliğini tamamlandığında belirlemek için özelliği yoklayabilirsiniz.

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

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

wshShell.Run ZipCommand,1,1 

son iki argüman Göster penceresi vardır: P

Daha iyi bir yol buldum:

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

Set oExec = WshShell.Exec(ZipCommand) 

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

Çalıştır() yerine Exec() işlevini kullanmanın bir avantajı, StdOut ve StdErr öğelerine de erişebilmenizdir. Bununla ilgilenmiyorsanız, Run() daha basittir. –

13

döngü şiddetli CPU domuz olmasına karşın, çıkıyor: İşte msdn bir örnektir ve Blok Yürütme :)