Ответ 1
Использование может использовать NET stop
, который является синхронным, то есть он будет ждать остановки службы.
См - остановка NET
Я использую пакетный файл, чтобы остановить службу Windows. Я использую команду sc
, но я открыт для других идей, учитывая вопрос ниже. Проблема заключается в том, что пакетный файл продолжается, пока служба останавливается (аргумент stop
для sc
кажется только запросить остановку - он не ждет остановки).
Как мне изменить пакетный файл, чтобы он не продолжался до завершения остановки?
Использование может использовать NET stop
, который является синхронным, то есть он будет ждать остановки службы.
См - остановка NET
Как упоминалось выше, NET STOP отправит в службу остановки команду остановки, но если услуга занимает более определенного времени (20 секунд или около того - мое наблюдение), NET STOP НЕ будет ждать, пока служба фактически остановится перед возвратом.
Чтобы приостановить пакетный файл до остановки службы, вам необходимо использовать подход, подобный описанному в этих потоках:
Как проверить, запущена ли служба через пакетный файл и запустить ее, если она не запущена?
Остановка/запуск удаленной службы Windows и ее открытие/закрытие
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
Я полагаю, что net stop [Service]
должен ждать, пока служба полностью остановится, прежде чем двигаться дальше. sc stop [Service]
просто отправляет сообщение "stop" в службу.
Это немного грубо, но это сработало для меня, чтобы я мог запланировать ежедневный пакетный файл, по существу, RESTART для службы.
NET STOP [Сервис]
: TryAgain
TIMEOUT/T 10/NOBREAK
NET START [Сервис]
IF% ERRORLEVEL% NEQ 0 GOTO TryAgain
Я понимаю с помощью этого фрагмента кода, что это может привести к бесконечному циклу, если служба не должна успешно запускаться. Я просто хотел в основном показать, как обойти проблему, используя TIMEOUT, где служба может занять больше времени, чем позволяет команда NET STOP.
Используйте символ &&
между командами. Символ &&
ждет завершения предыдущей команды, прежде чем перейти к следующей команде.
Все команды должны быть в одной и той же командной строке. Вы можете использовать столько команд, которые вы хотите в строке.
Вы также можете использовать команду pause
. При этом попробуйте нажать любую клавишу, прежде чем приступать к следующей процедуре.
Например:
sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause