2008-09-08 31 views
6

Tôi đang sử dụng WScript để tự động hóa một số tác vụ, bằng cách sử dụng WScript.Shell để gọi các chương trình bên ngoài.WScript.Shell và chặn thực thi?

Tuy nhiên, hiện tại nó không chờ chương trình bên ngoài kết thúc và thay vào đó hãy tiếp tục. Điều này gây ra vấn đề bởi vì tôi có một số nhiệm vụ phụ thuộc vào những người khác hoàn thành đầu tiên.

Tôi đang sử dụng mã như:

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

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

Có cách nào để làm điều này để nó ngăn chặn cho đến khi vỏ thực hiện lợi nhuận chương trình?

Trả lời

5

Nếu bạn sử dụng phương thức "Exec", nó trả về một tham chiếu, vì vậy bạn có thể thăm dò ý kiến ​​thuộc tính "Trạng thái" để xác định khi nào nó hoàn tất. Đây là một mẫu từ msdn:

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

Set oExec = WshShell.Exec(ZipCommand) 

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

Lợi thế của việc sử dụng Exec() thay vì Run() là bạn có thể truy cập StdOut & StdErr. Nếu bạn không quan tâm về điều đó, tuy nhiên, Run() là đơn giản hơn. –

13

Hóa ra, rằng trong khi vòng lặp là CPU nghiêm trọng heo: P

Tôi tìm thấy một cách tốt hơn:

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

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

wshShell.Run ZipCommand,1,1 

Hai đối số cuối cùng là Hiện cửa sổ và Block Execution :)

Các vấn đề liên quan