Odpowiedzi:
Plakat chce się upewnić, że usługa została zatrzymana przed próbą jej ponownego uruchomienia. Możesz użyć pętli na wyjściu „zapytania sc”, wykonując coś takiego:
:stop
sc stop myservice
rem cause a ~10 second sleep before checking the service state
ping 127.0.0.1 -n 10 -w 1000 > nul
sc query myservice | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :stop
goto :start
:start
net start | find /i "My Service">nul && goto :start
sc start myservice
Zupełnie prosty w PowerShell:
PS >Restart-Service MySrvcHere
Jeszcze lepiej, używając wyświetlanych nazw:
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
po więcej
Jeśli służy to wyłącznie do ponownego uruchomienia usługi, możesz użyć
Net stop myservice
Net start myservice
Jeśli jednak chcesz uzyskać dostęp do opcji sc, możesz użyć polecenia start / wait
start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
ta technika jest bardziej ogólnym rozwiązaniem, które można zastosować do dowolnego polecenia.
sc stop myservice
wyśle po prostu polecenie stop i wróci przed zatrzymaniem usługi. Wywołanie sc za pomocą start / b nie pomoże.
Aby mieć cichy restart niektórych usług, które wymagają zatrzymania potwierdzeń (na przykład usługi serwera), możesz dodać / y do komendy zakończenia stop.
net stop Server /y
net start Server
Byłoby pomocne w przypadku automatycznego wykonywania skryptu.
Jeśli chcesz zrestartować uszkodzoną usługę, nie musisz uruchamiać skryptu. W usłudze MMC Snap kliknij prawym przyciskiem myszy usługę, wybierz właściwości, kliknij kartę odzyskiwania. Tutaj możesz ustawić, jakie działania chcesz podjąć, aby usługa przestała działać. Dostępna jest duża elastyczność. Będziesz potrzebował skryptu, jeśli próbujesz zatrzymać usługę, zrób coś, a następnie uruchom skrypt, poprzedzaj plik wsadowy net stop "myserviceshortname"
i zakończnet start "myserviceshortname"
W vbscipt jest trochę więcej kodu, aby zatrzymać usługę i jej „zależności”:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='myservice'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
objService.StopService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='myservice'")
For each objService in colServiceList
errReturn = objService.StopService()
Next
Oto rozpoczęcie usługi i wszystko, od czego to zależy (powinno być znane)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='Myservice'")
For each objService in colServiceList
errReturn = objService.StartService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='myservice'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
objService.StartService()
Next