我使用WMI获取现在正在运行的所需进程的用户名。它在Windows XP中正常工作,并返回运行进程的所有用户(例如:notepad.exe)
但是在Windows 8中它只返回当前用户,运行该进程的其他用户将不会出现。当我检查时,我发现returnVal
是2(拒绝访问)而不是0.但是我在管理用户中运行它。管理员运行正常。那有什么解决方案吗?或者请为我提供一个替代方案,以便让所有用户了解该过程。
Public Function GetProcessOwner(ByVal processName As String) As String
Dim query As String = (Convert.ToString("Select * from Win32_Process Where Name = """) & processName) + """"
Dim searcher As New ManagementObjectSearcher(query)
Dim owner As String
Dim processList As ManagementObjectCollection = searcher.[Get]()
For Each obj As ManagementObject In processList
Dim argList As String() = New String() {String.Empty, String.Empty}
Dim returnVal As Integer = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList))
If returnVal = 0 Then
owner = owner & " " & argList(0)
End If
Next
Return Owner
End Function
答案 0 :(得分:1)
由于新的安全模型,从Windows Vista开始,您现在需要具有提升权限才能访问当前用户未运行的进程属性。同样适用于其他许多内容,例如写入Program Files,访问HKLM ......等等。
所以基本上你需要提升你的进程。例如,请参阅:Run elevated process