Передо мной встала задача: проверить запущен ли процесс, и если нет, то запустить его.
Общий шаблон решения выглядит следующим образом (файл check.cmd):
Пример запуска скрипта:
Изменим его с целью проверки процесса, например, калькулятора (calc.exe). Если калькулятор не запущен, то запустить его. И так в бесконечном цикле... (оставить скрипт можно, например, через Ctrl+C):
Таким образом, каждые 10 секунд проверяется наличие заданного числа копий процесса (в данном случае 1). Если такого числа процессов нет, то запускается очередной.
Если программа находится в нестандартной папке, то начало скрипта можно немного изменить:
Желаю удачи!
Общий шаблон решения выглядит следующим образом (файл check.cmd):
@echo off
rem Исправьте имя процесса по-умолчанию
set filename=chrome.exe
if "%1" neq "" set filename=%1
for /f %%a in ('tasklist /nh /fi "imagename eq %filename%" ^| find /c "%filename%"') do set /a quantity=%%a
rem Если запущена 1 и более копий процесса
if %quantity% geq 1 goto ALREADY_RUN
echo No processes of %filename%! Doing stuff...
rem ... Вставьте сюда свои команды, когда процесс НЕ запущен ...
goto END
:ALREADY_RUN
echo Already run %quantity% processes of %filename%
rem ... Вставьте сюда свои команды, когда процесс запущен ...
:END
pause
Пример запуска скрипта:
Изменим его с целью проверки процесса, например, калькулятора (calc.exe). Если калькулятор не запущен, то запустить его. И так в бесконечном цикле... (оставить скрипт можно, например, через Ctrl+C):
@echo off
set filename=calc.exe
if "%1" neq "" set filename=%1
:BEGIN
for /f %%a in ('tasklist /nh /fi "imagename eq %filename%" ^| find /c "%filename%"') do set /a quantity=%%a
if %quantity% geq 1 goto ALREADY_RUN
echo Run %filename%...
start %filename%
goto END
:ALREADY_RUN
echo Already run %quantity% processes of %filename%
:END
rem Ждём 10 секунд между проверками
timeout /t 10
goto BEGIN
Таким образом, каждые 10 секунд проверяется наличие заданного числа копий процесса (в данном случае 1). Если такого числа процессов нет, то запускается очередной.
Если программа находится в нестандартной папке, то начало скрипта можно немного изменить:
@echo off
d:
cd "D:\Programs\Test Pro v123"
set filename=Tester.exe
if "%1" neq "" set filename=%1
:BEGIN
...
Желаю удачи!

Спасибо, полезно!
ОтветитьУдалитьУ меня на серваке прога для таких дел крутится, ProManager(www.basicsoft.net/products.html), гарантирует, что выбранные программы будут всегда или в определенный отрезок времени запущены, а другим не дает запуститься. Мне помогло, теперь сплю спокойно по ночам :)
ОтветитьУдалить