PDA

Показать полную графическую версию : Останавливаем службу с проверкой


rosalin
15-09-2023, 10:03
Добрый день!
помогите пожалуйста написать батник для планировщика, который проверяет статус службы ServiceName, если запущена , то останавливает ее , после остановки , импортируем в реестр

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{927CDB68-F2B8-2D7C-2C00-03E1578A93F6}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{927CDB68-F2B8-2D7C-2C00-03E1578A93F6}\MiscStatus]
"Data"=hex:80,49,10,6a,47,1c,33,ce,69,32,91,95,96,be,28,a5,31,4f,59,3f,cd,52,\
2c,cf,37,7f,41,64,e5,8f,1b

запускаем службу ServiceName

PS Служба останавливается не сразу нужен какой то таймаут

NickM
15-09-2023, 10:47
который проверяет статус службы ServiceName, если запущена , то останавливает ее , после остановки , импортируем в реестр »
Типа такого:
@echo off
sc query ServiceName | find "STOPPED" > nul
if %ERRORLEVEL% NEQ 0 (
echo.STARTED
sc stop ServiceName
) else (
echo.STOPPED
)
ping -n 15 localhost > Nul
reg import regfile.reg
sc start ServiceName

rosalin
15-09-2023, 11:08
@echo on
Set ServiceName=Undelete
sc query %ServiceName% | find "STOPPED" > nul
if %ERRORLEVEL% NEQ 0 (
echo.STARTED
sc stop %ServiceName%
) else (
echo.STOPPED
)
ping -n 15 localhost > Nul
reg import CLSID53NEW927HKLM.reg
sc start %ServiceName%

Результат такой , если служба остановлена, то все срабатывает как надо, а если запущена , то происходит остановка и все , нужно чтобы если служба запущена , то останавливает ее , после остановки , импортируем в реестр

NickM
15-09-2023, 11:34
У Вас прав на остановку службы хватает?

Попробуйте отладить сценарий ручным запуском.

rosalin
15-09-2023, 11:45
У Вас прав на остановку службы хватает?
Попробуйте отладить сценарий ручным запуском. »
Пробую , но пока не понимаю причину,
запускаю от имени администратора,

если служба запущена , то просто останавливаеться,
до этого блока не доходит
ping -n 15 localhost > Nul
reg import CLSID53NEW927HKLM.reg
sc start %ServiceName%

если служба не запущена то идет все по сценарию

Вот так вроде работает , но не уверен в чистоте кода

@echo on
Set ServiceName=Undelete
sc query %ServiceName% | find "STOPPED" > nul
if %ERRORLEVEL% NEQ 0 (
echo.STARTED
sc stop %ServiceName%
ping -n 15 localhost > Nul
reg import CLSID53NEW927HKLM.reg
rem sc start %ServiceName%
) else (
echo.STOPPED
)
ping -n 15 localhost > Nul
reg import CLSID53NEW927HKLM.reg
sc start %ServiceName%

NickM
15-09-2023, 15:20
Попробуйте отладить сценарий ручным запуском. »
Как-то так:
@echo off
set "chksvc=Undelete"
echo.1. Проверка статуса службы "%chksvc%"
sc query %chksvc% | find "STOPPED" > nul
if %ERRORLEVEL% NEQ 0 (
echo."%chksvc%" работает, остановим её
sc stop %chksvc% > nul
) else (
echo."%chksvc%" остановлена
)
echo.
echo.2. Задержка с помощью пинг
ping -n 5 localhost > Nul
echo.
echo.3. Статус службы "%chksvc%"
sc query %chksvc% | find "STOPPED"
echo.
echo.4. Импорт reg-файла
echo.
echo.5. Запуск и статус службы "%chksvc%"
sc start %chksvc% > nul
ping -n 5 localhost > Nul
sc query %chksvc% | find "RUNNING"

pause

https://imgsh.net/i/30hHki8.png
https://imgsh.net/i/nISrtWG.png

Опиум
12-10-2023, 12:35
Служба останавливается не сразу нужен какой то таймаут »
а разве net stop servicename не возвращает управление, когда сервис остановился? зачем доп таймаут?




© OSzone.net 2001-2012