Остановить пакетный файл до полной остановки службы? - PullRequest
30 голосов
/ 20 мая 2010

Я использую командный файл для остановки службы Windows. Я использую команду sc, но я открыт для других идей, учитывая вопрос ниже. Проблема заключается в том, что пакетный файл продолжает , пока служба останавливается (аргумент stop для sc кажется только для запроса остановка - это не подождите до остановки).

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

Ответы [ 6 ]

25 голосов
/ 20 мая 2010

Использование может использовать NET stop, который является синхронным, то есть он будет ждать, пока служба остановится.

См - NET stop

18 голосов
/ 25 октября 2016
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)
13 голосов
/ 07 августа 2013

Как упомянуто выше, NET STOP отправит команду остановки в службу, но, если служба занимает больше определенного времени (20 секунд или около того, как я наблюдал), NET STOP НЕ будет ожидать фактической остановки службы перед возвращением.

Чтобы фактически приостановить пакетный файл до остановки службы, вам нужно использовать подход, подобный изложенному в следующих темах:

Как проверить, запущена ли служба через командный файл, и запустить ее, если она не запущена?

Остановка / запуск удаленной службы Windows и ожидание ее открытия / закрытия

1 голос
/ 01 июля 2015

Это немного грубо, но это сработало для меня, чтобы гарантировать, что я могу запланировать ежедневный пакетный файл, чтобы по существу перезапустить службу.

NET STOP [Сервис]

: TryAgain

ВРЕМЯ / T 10 / NOBREAK

NET START [Сервис]

ЕСЛИ% ERRORLEVEL% NEQ 0 GOTO TryAgain

В этом фрагменте кода я понимаю, что это может привести к бесконечному циклу, если служба не запустится успешно. Я просто хотел показать, как обойти проблему, используя TIMEOUT, где остановка службы может занять больше времени, чем позволяет команда NET STOP.

1 голос
/ 20 мая 2010

Я считаю, net stop [Service] следует подождать, пока служба полностью не остановится, прежде чем двигаться дальше. sc stop [Service] просто отправляет в службу сообщение «стоп».

0 голосов
/ 30 ноября 2016

Используйте символ && между командами. Символ && ожидает завершения предыдущей команды, прежде чем перейти к следующей команде.

Все команды должны находиться в одной строке команд. Вы можете использовать столько команд, сколько хотите в строке.

Вы также можете использовать команду pause. При этом просит нажать любую клавишу, прежде чем перейти к следующей процедуре.

Например:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
...