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

Я хочу записать пакетный файл, который выполняет следующие операции:

  • Проверьте, работает ли услуга
    • Если это выполнение, выйдите из пакета
    • Если это не работает, запустите сервис

Примеры кода, которые я погуглил до сих пор, оказалось, не работали, таким образом, я решил не отправить их.

Запуск сервиса сделан:

net start "SERVICENAME"
  1. Как я могу проверить, работает ли услуга, и как сделать если оператор в batchfile?
  2. Я немного смущен. Каков аргумент, который я должен передать на сетевой запуск? Сервисное название или его отображаемое имя?
85
задан citronas 5 February 2015 в 11:33
поделиться

3 ответа

Чтобы проверить состояние службы, используйте sc query . Что касается блоков if в пакетных файлах, ознакомьтесь с документацией.

Следующий код проверит состояние службы MyServiceName и запустит ее, если она не запущена (блок if будет выполнен, если служба не запущена):

for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   REM For example, the following line
   net start "MyServiceName"
  )
)

Объяснение того, что он делает:

  1. Запрашивает свойства службы.
  2. Ищет строку, содержащую текст "STATE"
  3. Токенизирует эту строку и извлекает 3-й токен, который содержит состояние сервиса.
  4. Проверяет полученное состояние на соответствие строке "RUNNING"

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

156
ответ дан 24 November 2019 в 08:11
поделиться

Это должно сработать:

FOR %%a IN (%Svcs%) DO (SC query %%a | FIND /i "RUNNING"
IF ERRORLEVEL 1 SC start %%a)
14
ответ дан 24 November 2019 в 08:11
поделиться

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

sc query [ServiceName] | findstr /i "STATE"

Когда я запускаю это для моего антивируса NOD32, я получаю:

STATE                       : 4 RUNNING

Если бы он был остановлен, я бы получил:

STATE                       : 1 STOPPED

Вы можете использовать это в переменной, чтобы затем определить, используете ли вы NET START или нет.

Имя службы должно быть именем службы, а не отображаемым именем.

19
ответ дан 24 November 2019 в 08:11
поделиться