Задать вопрос
@fishmen
Новичёк

Вопрос по vbs, как закрыть определённый процесс при его появлении в диспетчере задач?

Здравствуйте.Есть такой скрипт vbs который закрывает определённый процесс из диспетчера задач.
Вот его код

Dim oShell : Set oShell = CreateObject("WScript.Shell")

' Kill notepad '
oShell.Run "taskkill /im update_notepad.exe", , True

Код срабатывает если присутствует процесс в диспетчере задач,если нет то закрывается с ошибкой.
Проблема заключается в том что процесс который надо закрыть появляется через через минуту ,а скрипт запущен раньше,тоесть он просто выключается .
Можно ли как то сделать чтобы скрипт повторял действия до появления процесса ,а после успешного закрытия завершал работу,при этом желательно без запущеного чёрного окошка с задачей?
  • Вопрос задан
  • 4468 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
От консольного окна можно избавиться запуская скрипт с помощью wscript:
wscript <имя скрипта>

Консольное окно от taskkill можно скрыть запуская команду так:
oShell.Run "taskkill /im update_notepad.exe", 1, True

На счет ожидания: метод Run объекта WScript.Shell возвращает код возврата запускаемого приложения.
Если taskkill умеет сам сигнализировать о проделанной работе, то можно в цикле вызывать taskkill и анализировать код возврата, до тех пор пока по коду не станет ясно, что процесс удален.
Вам нужно самому выяснить коды возврата taskkill, сделать это можно с помощью простого батника, анализируя errorlevel после вызова taskkill. В документации я нигде кодов возврата taskkill не встречал.

Если же taskkill не использует коды возврата (многие стандартные виндовые утилиты пренебрегают этим средством), то задача усложняется.
Один из вариантов - анализировать вывод taskkill, с помощью find или findstr и ловить их код возврата (эти утилиты точно сообщают в коде возврата, что строка найдена или не найдена).
Другой вариант - сначала выяснить с помощью tasklist запущен ли ваш процесс и только потом вызывать taskkill.

И не забывайте делать паузы между вызовами taskkill, т.к. эта карусель без пауз отожрет у вас изрядно процессорного времени.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы