Через консоль можно перезапустить службу:
Net start ИМЯ_СЛУЖБЫ
Net stop ИМЯ_СЛУЖБЫ
Исходя из этого предлагаю скрипт решение:
Код |
---|
@Echo Off
Set ServiceName=ИМЯ_СЛУЖБЫ
:: Получаем состояние службы, проверяем запущена ли она
SC queryex %ServiceName%|Find "STATE"|Find "RUNNING">Nul&&(
rem Пробуем остановить
Net stop %ServiceName%>nul||(
rem Если остановить через net stop не вышло, запрашиваем PID
For /F "tokens=3" %%A In ('SC queryex %ServiceName%^|Find "PID"') Do (
rem Убиваем процесс вместе с дочерними, используя полученный PID
TaskKill /F /T /PID %%A>nul
rem Задержка, чтобы обновился статус службы после убийства процесса
Ping -n 4 127.0.0.1>nul
)
rem На всякий случай
Net stop %ServiceName% 2>nul
)
)
rem Если служба не была запущена, или уже убита к тому времени - запускаем её
Net start %ServiceName%
Pause
|
Ping -n 4 127.0.0.1 - используется для задержки.
Если у вас задача рестартить службу каждый час не зависимо от ее статуса то делайте так, т.к не всегда можно определить зависла служба или нет:
Код |
---|
@Echo Off
Set ServiceName=имя_службы
Net stop %ServiceName%>nul
Ping -n 4 127.0.0.1>nul
rem Если служба не была запущена, или уже убита к тому времени - запускаем её
Net start %ServiceName%
exit
|