gpt4 book ai didi

vbscript - 在 VBScript 中停止服务并等待

转载 作者:行者123 更新时间:2023-12-02 16:57:17 26 4
gpt4 key购买 nike

如何在 vbscript 中停止服务并等待其完成停止?

到目前为止我已经得到了这个:

For Each objService in colServiceList
If objService.DisplayName = "<my display name>" Then
objService.StopService()
End If
Next

谷歌搜索出现了使用objService.WaitForStatus(ServiceControllerStatus.Stopped)的建议,但运行该建议时出现“需要对象:'ServiceControllerStatus'”错误。

最佳答案

WMI Win32_Service 接口(interface)中不包含 WaitForStatus 方法。我认为这是来自 .NET 类。没有等效的 WMI 方法。

您必须重新查询 WMI 服务对象才能获取更新的状态。然后,一旦状态更改为“已停止”,您就可以退出循环。

Option Explicit

Const MAX_ITER = 30, _
VERBOSE = True

Dim wmi, is_running, iter
Set wmi = GetObject("winmgmts:")

For iter = 0 To MAX_ITER
StopService "MSSQL$SQLEXPRESS", is_running
If Not is_running Then
Log "Success"
WScript.Quit 0
End If

WScript.Sleep 500
Next

Log "max iterations exceeded; timeout"
WScript.Quit 1

' stop service by name. returns false in is_running if the service is not
' currently running or was not found.
Sub StopService(svc_name, ByRef is_running)
Dim qsvc, svc

is_running = False
Set qsvc = wmi.ExecQuery( _
"SELECT * FROM Win32_Service " & _
"WHERE Name = '" & svc_name & "'")
For Each svc In qsvc
If svc.Started Then
is_running = True
If svc.State = "Running" Then svc.StopService
Log svc.Name & ": " & svc.Status
End If
Next
End Sub

Sub Log(txt)
If VERBOSE Then WScript.StdErr.WriteLine txt
End Sub

关于vbscript - 在 VBScript 中停止服务并等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com