Перезапуск программы при её случайном закрытии

Albert_researcher

Модератор
Команда форума
Часто бывает, что постоянно требуется почтовая программа и при случайном её закрытии можно многое пропустить. Предлагаю следующее решение.

@echo off
set fullname=C:\Program Files\Mozilla Thunderbird\thunderbird.exe
set prog=thunderbird.exe
:waiting
tasklist |>nul FindStr /B /L /I /C:%prog%&&(ping -n 60 -w 1000 192.168.254.254>NUL & goto :waiting)
start "" "%fullname%"
goto :waiting

Но возникает проблема в открытом консольном окне, которое легко закрыть.
Ander_73 наткнулся на интересное решение скрытия батника из самого себя без привлечения сторонних утилит.
Powershell -WindowStyle Hidden -Command "& { Clear-Host }"
Физика процесса: powershell запускается в консольном окне "родительского" батника и, отрабатывая флаг Hidden, скрывает его. Метод работает только при наличии в системе powershell, то есть в Win7 и выше.

@echo off
Powershell -WindowStyle Hidden -Command "& { Clear-Host }"
set fullname=C:\Program Files\Mozilla Thunderbird\thunderbird.exe
set prog=thunderbird.exe
:waiting
tasklist |>nul FindStr /B /L /I /C:%prog%&&(ping -n 60 -w 1000 192.168.254.254>NUL & goto :waiting)
start "" "%fullname%"
goto :waiting

Не забываем запускать батник от имени администратора. Здесь очень удобно воспользоваться программой
7z SFX Constructor v4.5 от Joker-2013 и запускать файл с расширением exe, а не bat. Может произойти случай рейдерского захвата антивирусом запускающего файла, тогда возможны чудеса в виде умножения количества открытых почтовых программ. В этом случае придется перезагрузить компьютер и полюбовно решить дела с антивирусом.
 
Последнее редактирование:
Верх