我在启动和停止服务时遇到了一个小问题。当我打开services.msc
并查看服务列表时,它们都有名字。但是,当我运行此代码时:
Dim objService As Object
Dim objSet As Object
IsServiceRunning = False
Set objSet = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Service")
For Each objService In objSet
If (UCase(strServiceName) = UCase(objService.Name)) And (UCase(objService.State) = UCase("Running")) Then
IsServiceRunning = True
End If
Next
objService.Name
值与列表中的名称不同。例如,“计算机浏览器”只是“浏览器”,“分布式文件系统”是“dfs”,“网络登录”是“netlogon”。有没有办法从这个objService对象中提取这些服务的完整,更长的名称?我可以解决这个问题,但为了清楚起见,我宁愿使用相同的值来确定服务是否正在运行,进行NET START
或NET STOP
命令行调用以及记录。
答案 0 :(得分:3)
只需使用objService.Caption
即可访问服务的“长名称”。
我发现了这个属性的名称:
For Each objService In objSet
For Each vElem In objService.Properties_
Debug.Print vElem.Name; "=";
Debug.Print vElem.Value
Next
Exit For
...
Next
只需将objService
放入观察窗口即可查找Properties_
属性。将vElem
放在观察窗口中,以查找Name
和Value
对象的默认属性IsArray
(除了SWbemProperty
等)。