Câu trả lời:
Người đăng muốn đảm bảo dịch vụ bị dừng trước khi thử khởi động lại. Bạn có thể sử dụng một vòng lặp trên đầu ra của "sc query" để làm một cái gì đó như thế này:
: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
Chết đơn giản với powershell:
PS >Restart-Service MySrvcHere
Thậm chí tốt hơn, sử dụng tên hiển thị:
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
để biết thêm
Nếu đó hoàn toàn là để khởi động lại dịch vụ, bạn có thể sử dụng
Net stop myservice
Net start myservice
Tuy nhiên, nếu bạn muốn truy cập vào các tùy chọn của sc, bạn có thể sử dụng lệnh start / Wait
start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
kỹ thuật này là một giải pháp tổng quát hơn có thể được áp dụng cho bất kỳ lệnh nào.
sc stop myservice
sẽ chỉ gửi lệnh dừng và quay lại trước khi dịch vụ bị dừng. Gọi sc với start / b sẽ không giúp được gì.
Để khởi động lại yên tĩnh một số dịch vụ, yêu cầu dừng xác nhận (ví dụ như dịch vụ Máy chủ), Bạn có thể thêm / y vào cuối lệnh dừng.
net stop Server /y
net start Server
Nó sẽ hữu ích cho việc thực thi kịch bản tự động.
Nếu bạn muốn khởi động lại một dịch vụ thất bại, bạn không cần phải chạy tập lệnh. Trong dịch vụ MMC snapin nhấp chuột phải vào một dịch vụ, chọn thuộc tính, nhấp vào tab khôi phục. Tại đây bạn có thể thiết lập những hành động bạn muốn thực hiện khi dịch vụ dừng lại. Có rất nhiều tính linh hoạt có sẵn. Bạn sẽ cần một tập lệnh nếu bạn đang cố gắng dừng dịch vụ, làm một cái gì đó sau đó khởi động tập lệnh, mở đầu tập tin bó net stop "myserviceshortname"
và kết thúc bằngnet start "myserviceshortname"
Trong vbscipt, cần thêm một chút mã để dừng dịch vụ và 'người phụ thuộc của nó:
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
Đây là bắt đầu một dịch vụ và bất cứ điều gì nó phụ thuộc vào (điều này nên quen thuộc)
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