Подтвердить что ты не робот

Запустить пакетный файл до завершения обслуживания?

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

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

4b9b3361

Ответ 1

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

См  - остановка NET

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

NET STOP [Сервис]

: TryAgain

TIMEOUT/T 10/NOBREAK

NET START [Сервис]

IF% ERRORLEVEL% NEQ 0 GOTO TryAgain

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

Ответ 6

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

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

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

Например:

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