无论依赖的服务状态如何,都有恢复选项来启动服务吗?

时间:2019-04-10 15:04:18

标签: windows

关键服务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

1 个答案:

答案 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