UncleFather » 17 фев 2014 17:51, Пн
Задача:
Необходимо перезапустить из командного (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» во всех локализациях отображается одинаково, поэтому второй метод является более универсальным.
[b][size=150]Задача:[/size][/b]
Необходимо перезапустить из командного (bat) файла какую-либо службу Windows, причем необходимо убедиться, что указанная служба действительно запустилась.
[b][size=150]Решение:[/size][/b]
Приведу два примера. Они по-сути одинаковые, только проверка состояния службы Windows немного отличается.
[list][*] Вариант 1:
[code]@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[/code]
[*] Вариант 2:
[code]@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[/code][/list]
В обоих вариантах алгоритм такой:
[list=1][*] Завершаем службу
[*] Делаем паузу 10 секунд командой PING до несуществующего хоста
[*] Запускаем службу
[*] Выполняем проверку
[*] Если служба не запущена, возвращаемся к метке «[b]ReStartService[/b]», иначе - завершаем работу командного файла[/list]
Различие методов - в способе проверки состояния службы. В первом методе мы просматриваем весь список запущенных служб на предмет наличия в нем псевдонима нашей службы (например, у службы «[b][i]Spooler[/i][/b]» псевдоним в русскоязычной локализации Windows будет «[i][b]Диспетчер очереди печати[/b][/i]»).
Во втором методе мы ищем в тексте, выдаваемом командой «[b][i]SC query[/i][/b]» строку «[b][i]1 STOPPED[/i][/b]», которая показывает состояние службы и в данном случае означает, что служба остановлена. Более того, строка «[b][i]1 STOPPED[/i][/b]» во всех локализациях отображается одинаково, поэтому второй метод является более универсальным.