1

Какую команду следует использовать вместо « Do nothing ниже, чтобы сказать, что она ничего не должна делать? Если я просто оставлю это пустым, WmiPrvSE.exe вызовет высокую загрузку процессора.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Do
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'wordpad.exe'")
If colProcesses.Count = 0 Then
    `Do nothing`
Else
    Wscript.Echo "wordpad.exe is running."
End If
Loop

2 ответа2

1

Командой , которую вы ищете, будет DoEvents , за исключением того, что эта концепция не существует в VBScript и не поможет в вашем случае.

Причина высокой загрузки процессора в том, что цикл продолжает повторять выполнение задачи снова и снова. Таким образом, он запрашивает, работает ли wordpad снова и снова, и когда это происходит, цикл не заканчивается, поэтому он продолжает это делать.

Что вы хотите сделать, так это ограничить выполнение сценария с промежуточным ожиданием.

Так что твое Do Nothing не делать будет примерно так:

starttime = timer
do: loop until timer = starttime + 1

+ 1 можно заменить на любое число, и оно будет ждать столько времени. Например, если вы хотите проверять только каждые 10 секунд, измените его на + 10 .

1

Оставить поле "если" пустым - скрипт использует высокую загрузку ЦП, потому что он завершает проверку "если", а затем движется очень быстро снова и снова и снова, потому что он не выдает команду остановить, и ваш ЦП выполняет инструкции как как можно быстрее.

Я думаю, что вы ищете команду sleep :

If colProcesses.Count = 0 The
    WScript.Sleep(10000)
Else

Это число составляет миллисекунды (1000 = 1 секунда) и является продолжительностью, на которую процесс будет приостановлен. В приведенном выше примере он останавливается на 10 секунд.

Справочник по SS64 для сна WScript

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .