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

时间:2012-06-12 17:46:55

标签: 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 (UCase(strServiceName) = UCase(objService.Name)) And (UCase(objService.State) = UCase("Running")) Then
        IsServiceRunning = True
    End If
Next

objService.Name值与列表中的名称不同。例如,“计算机浏览器”只是“浏览器”,“分布式文件系统”是“dfs”,“网络登录”是“netlogon”。有没有办法从这个objService对象中提取这些服务的完整,更长的名称?我可以解决这个问题,但为了清楚起见,我宁愿使用相同的值来确定服务是否正在运行,进行NET STARTNET STOP命令行调用以及记录。

1 个答案:

答案 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放在观察窗口中,以查找NameValue对象的默认属性IsArray(除了SWbemProperty等)。