Windows服务的两个不同名称(VB6)

Windows服务的两个不同名称(VB6),vb6,windows-services,windows-server-2003,windows-server-2000,Vb6,Windows Services,Windows Server 2003,Windows Server 2000,我在自动启动和停止服务时遇到了一个小问题。当我打开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

我在自动启动和停止服务时遇到了一个小问题。当我打开
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”,“网络登录”是“网络登录”。有没有办法从这个objService对象中提取这些服务的完整、较长的名称?我可以解决这个问题,但为了代码的清晰性,我宁愿使用相同的值来确定服务是否正在运行,进行
NET START
NET STOP
命令行调用,并记录日志。

只需使用
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\uu
property。将
vElem
也放在监视窗口中,以查找
Name
SWbemProperty
对象的默认属性
Value
(除了
IsArray
等)。

这看起来像是WMI问题,而不是特定于编程语言或服务的任何问题。请记住,WMI是基于大量“凭空猜测”和“凭空猜测”在注册表中的探索等,并不总是聚合您想要的所有内容。您可能可以通过API调用来完成所需的所有操作,甚至不必对NET START和NET STOP进行外壳处理。作为参考,您可以在“服务属性”窗口中看到这两个名称
Service name
是Windows和SCM使用的内部名称,
Display name
是它显示的用户友好名称。同时感谢您提供有关如何查找属性的提示。这可能非常方便。