3

我正在尝试检索特定位置中所有软件实例的 PID。它是一个便携式应用程序,因此系统中可能有多个副本,但我只对一个特定位置感兴趣。此外,它可以由不同的用户、管理员以及标准用户同时启动。

我复制了这个 VBS 代码(来自http://msdn.microsoft.com/en-us/library/windows/desktop/aa394372%28v=vs.85%29.aspx

strComputer = "."

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'foobar.exe'")

For Each objProcess in colProcesses
    If objProcess.GetOwner(User, Domain) = 0 Then
        WScript.Echo "Process " & objProcess.Name & " belongs to " & Domain & "\" & User
    Else
        WScript.Echo "Problem " & Rtn & " getting the owner for process " & objProcess.Caption
    End If
Next

我现在需要区分应用程序的完整路径。如果我使用(第 5 行),我只能看到当前用户objProcess.ExecutablePath启动的实例的完整路径,而使用(第 3 行)会出现某种语法错误。Where ExecutablePath

有什么帮助吗?

4

1 回答 1

5

文档所述,您需要管理员权限(更具体地说SeDebugPrivilege)才能查看其他用户的进程。

使用Where ExecutablePath = '...'子句时遇到的语法错误可能是因为您没有在路径中转义反斜杠。WMI 中的反斜杠查询具有特殊含义的转义字符,因此您需要将它们加倍以获得文字反斜杠:

Select * From Win32_Process Where ExecutablePath = 'C:\\Windows\\notepad.exe'

不过,我只是在这里猜测,因为您决定省略带有 Where 子句的实际查询和它引发的错误。

于 2012-10-09T22:05:35.337 回答