Задача:
Необходимо перезапустить из командного (bat) файла какую-либо службу Windows, причем необходимо убедиться, что указанная служба действительно запустилась.
Решение:
Приведу два примера. Они по-сути одинаковые, только проверка состояния службы Windows немного отличается.
-
Вариант 1:
Код: Выделить всё
@Echo Off Net Stop Spooler PING -n 1 -w 10000 192.168.253.253 > nul :ReStartService Net Start Spooler net start | find /i "Диспетчер очереди печати">NUL if %errorlevel%==1 echo GoTo ReStartService EXIT
-
Вариант 2:
Код: Выделить всё
@Echo Off Net Stop Spooler PING -n 1 -w 10000 192.168.253.253 > nul :ReStartService Net Start Spooler SC query Spooler | find /i "1 STOPPED" > nul if %errorlevel%==0 echo GoTo ReStartService EXIT
В обоих вариантах алгоритм такой:
-
Завершаем службу
-
Делаем паузу 10 секунд командой PING до несуществующего хоста
-
Запускаем службу
-
Выполняем проверку
-
Если служба не запущена, возвращаемся к метке «ReStartService», иначе - завершаем работу командного файла
Различие методов - в способе проверки состояния службы. В первом методе мы просматриваем весь список запущенных служб на предмет наличия в нем псевдонима нашей службы (например, у службы «Spooler» псевдоним в русскоязычной локализации Windows будет «Диспетчер очереди печати»).
Во втором методе мы ищем в тексте, выдаваемом командой «SC query» строку «1 STOPPED», которая показывает состояние службы и в данном случае означает, что служба остановлена. Более того, строка «1 STOPPED» во всех локализациях отображается одинаково, поэтому второй метод является более универсальным.