关键服务ServiceB,ServiceC和ServiceD必须在非关键ServiceA之后启动(ServiceA监视B,C和D,但对操作不是关键)。
如果启动ServiceA时遇到任何问题,我们仍然需要启动B,C和D。否则,我们总是要首先启动ServiceA。如果A崩溃(在运行期间停止),我们不希望停止B,C或D
所有服务均设置为“自动启动”。 (我们不能为B,C和D使用延迟启动,因为该时机不合适,我们也不想为其他延迟服务更改默认的2分钟)
已经在服务B,C和D上设置了依赖关系,因此,如果服务未运行,它们将始终启动必需的服务。如果ServiceA停止,这些将停止。
以下用于设置依赖关系的命令:
sc config ServiceB depend= ServiceA
我们正在探索系统中是否有启动B,C和D的恢复选项,无论A在多次尝试后是否都不会启动。
如果无法通过SC.exe或Windows 10进行配置,那么我们可以恢复使用启动脚本或自定义服务控制应用程序,因为我都已经构建了该程序,但希望使用这种更简洁的方法来配置操作系统。
是否可以使用不同的延迟启动等待值配置服务组?
任何建议或修改表示赞赏。 TIA
答案 0 :(得分:0)
由于我们已经运行了启动脚本,因此我将其快速组合在一起。这不是理想的方法,但效率不高,但确实可以。将ServiceB,C和D设置为手动启动,然后使用它们启动它们可能会获得所需的结果,而无需上面的依赖关系。
Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe" _
, """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
WScript.Quit
End If
If Not ServiceAction("ServiceA", -1) = "RUNNING" Then
'Stop the services if they are running
ServiceAction "ServiceB", 0
ServiceAction "ServiceC", 0
ServiceAction "ServiceD", 0
'Start the services in sequence
ServiceAction "ServiceA", 1
ServiceAction "ServiceB", 1
ServiceAction "ServiceC", 1
ServiceAction "ServiceD", 1
End If
Function ServiceAction(service_name, service_action)
'Start Service
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='" & service_name & "'")
For Each objService in colListOfServices
If service_action = -1 Then
ServiceAction = UCase(objService.State)
ElseIf service_action = 1 Then
ServiceAction = objService.StartService()
ElseIf service_action = 0 Then
ServiceAction = objService.StopService()
End If
Next
'For debugging
WScript.Echo "WMI CODE: "&ServiceAction
End Function