Не так давно ко мне обратились за помощью в реализации такого костыля.
Чтобы он мониторил через какое-то время процесс и если он не запущен автоматически — запускал.
первый вариант выглядел вот таким образом:
:proverka
tasklist | find «mspaint.exe»
if %ERRORLEVEL% EQU 1 goto restart
if %ERRORLEVEL% EQU 0 goto vremya
:vremya
timeout 10
goto proverka
:restart
start %windir%\system32\mspaint.exe
goto proverka
Данный код при запуске проверял через команду tasklist запущен или нет процесс под таким именем.
Если ответ был отрицательным то он переходит на функцию :restart и запускает нужный процесс и переходит на функцию :proverka для повторной проверки о состоянии данного процесса.
Если ответ был положительным то он переходит на функцию :vremya и ждет указанное количество секунд после переходит на функцию :proverka и далее по кругу.
У данного кода проблема в том что окно командной строки всегда виден.
Вечером немного подумал и решил bat скрипт довести до ума и скрыть назойливое окно и запускать уже автоматом скрытый процесс.
Для этого сначала создаем bat файл который добавит данную мини программу в планировщик windows.
В нем будет одна команда хотя её можно и ввести в командную строку. Лично для меня через bat файл проще.
schtasks /Create /SC minute /mo 1 /TN win /TR c:\processmonitor.exe
Самое важное в данном коде это параметр /mo 1 значения отвечают за то что программа будет исполняться каждую минуту.
изменяем на ваше усмотрение.
Дальше берем первый код и убираем лишнее и создаем файл processmonitor.bat с кодом.
tasklist | find «mspaint.exe»
if %ERRORLEVEL% EQU 1 goto restart
exit
:restart
start %windir%\system32\mspaint.exe
Теперь осталось только файл processmonitor.bat конвертировать в exe и скрыть окно командной строки.
Данную процедуру описывал вот тут Конвертировать bat файл в exe.
На этом все пользуйтесь кому нужно не забываем комментировать, задавать вопросы и делиться с друзьями.