Вопрос

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

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

Это было полезно?

Решение

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

Видеть - Чистая остановка

Другие советы

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)

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

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

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

Остановка / запуск дистанционного обслуживания Windows и ждем его, чтобы открыть / закрыть

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

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

Чистая остановка [Сервис

:Попробуйте снова

Тайм-аут / T 10 / Nobreak

Чистый старт [Сервис

Если% ErrorLevel% NEQ 0 GOTO TRYAGAIN

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

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

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

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

Например:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top