获取该流程的所有用户

时间:2014-06-11 13:27:12

标签: c# vb.net windows winapi wmi

我使用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

1 个答案:

答案 0 :(得分:1)

由于新的安全模型,从Windows Vista开始,您现在需要具有提升权限才能访问当前用户未运行的进程属性。同样适用于其他许多内容,例如写入Program Files,访问HKLM ......等等。

所以基本上你需要提升你的进程。例如,请参阅:Run elevated process