WScript.Shell и блокировка выполнения? - PullRequest
8 голосов
/ 08 сентября 2008

Я использую WScript для автоматизации некоторых задач, используя WScript.Shell для вызова внешних программ.

Однако сейчас он не ожидает завершения внешней программы и вместо этого продолжает работу. Это вызывает проблемы, потому что у меня есть некоторые задачи, зависящие от других, заканчивающих сначала.

Я использую код как:

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

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

Есть ли способ сделать это так, чтобы он блокировался до тех пор, пока исполняемая оболочкой программа не вернется?

Ответы [ 2 ]

14 голосов
/ 08 сентября 2008

Оказывается, что в то время как цикл является серьезным ЦП: P

Я нашел лучший способ:

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

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

wshShell.Run ZipCommand,1,1

Последние два аргумента: Показать окно и Выполнение блока:)

7 голосов
/ 08 сентября 2008

Если вы используете метод «Exec», он возвращает ссылку, поэтому вы можете опрашивать свойство «Status», чтобы определить, когда он завершится. Вот пример из msdn :

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

Set oExec = WshShell.Exec(ZipCommand)

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