2013-03-03 3 views
0

Я сделал пакетный файл, который останавливает службы, удаляет файлы, устанавливает файлы и запускает службы. до сих пор никаких проблем. но сегодня он не смог установить файлы.Как проверить, были ли остановлены службы

После небольшого поиска я видел, что службы останавливаются, а не останавливаются. Я использую net stop «Service-Name», чтобы остановить услуги.

Как я могу проверить, когда службы остановлены или дождаться их полной остановки?

+0

См. Ответы на http://stackoverflow.com/questions/133883/stop-and-start-a-service-via-batch-or-cmd-file или [Как проверить код выхода последней команды в пакетный файл] [1]. [1]: http://superuser.com/questions/194662/how-to-check-the-exit-code-of-the-last-command-in-batch-file – Mogsdad

ответ

1

wmic service where name="Service-Name" get state покажет вам, работает ли служба или остановлена. Вы можете вернуться к этой команде и использовать ping для паузы.

:running 
ping /n 2 0.0.0.0 >NUL 
for /f "tokens=2 delims=^=" %%I in ('wmic service where name^="Service-Name" get state /format:list') do (
    if #%%I==#Running goto running 
) 
rem When the script reaches this line, the service status is not "Running." 

Или, если вы предпочитаете использовать sc, чтобы определить состояние службы:

:running 
ping /n 2 0.0.0.0 >NUL 
for /f "tokens=4" %%I in ('sc query Service-Name ^| find /i "state"') do (
    if #%%I==#RUNNING goto running 
) 
rem When the script reaches this line, the service status is not "Running." 

Я не уверен, но возможно, что сервис может сказать «остановился», когда на самом деле это «остановка »или« работает », когда это действительно« начинается ». Если это так, то вам может быть лучше проверить, существует ли процесс в списке процессов. Это также можно сделать с помощью wmic: wmic process where name="appname.exe" get name или аналогичного.

+0

этот код : sc query Service-Name^| find/i "state" было чрезвычайно полезно. Большое спасибо. – elad

Смежные вопросы