2009-02-19 56 views
2

如何在C#中查找给定进程的所有者?类System.Diagnostics.Process似乎没有任何属性或方法可以获取此信息。我认为它必须可用,因为它显示在“用户名”列下的Windows任务管理器中。如何在.net中获取用户名或进程所有者

我的具体情况涉及查找作为“本地服务”运行的进程的实例(如taskhost.exe)。我知道如何使用

Process.GetProcessesByName("taskhost") 

所以现在我只需要知道如何识别正在运行的本地服务的人找taskhost的所有实例。

回答

1

可能想尝试在this link

第一个结果在谷歌搜索“C#获取进程所有者”

最有可能的代码任务管理器通过C使用Win32 API执行此操作。该流程也在上面的链接中概述。

6

使用WMI检索Win32_Process class的实例,然后在每个实例上调用GetOwner method以获取运行该进程的用户的域名和用户名。在添加对System.Management组件的引用后,下面的代码应该让您开始:

// The call to InvokeMethod below will fail if the Handle property is not retrieved 
string[] propertiesToSelect = new[] { "Handle", "ProcessId" }; 
SelectQuery processQuery = new SelectQuery("Win32_Process", "Name = 'taskhost.exe'", propertiesToSelect); 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(processQuery)) 
using (ManagementObjectCollection processes = searcher.Get()) 
    foreach (ManagementObject process in processes) 
    { 
     object[] outParameters = new object[2]; 
     uint result = (uint) process.InvokeMethod("GetOwner", outParameters); 

     if (result == 0) 
     { 
      string user = (string) outParameters[0]; 
      string domain = (string) outParameters[1]; 
      uint processId = (uint) process["ProcessId"]; 

      // Use process data... 
     } 
     else 
     { 
      // Handle GetOwner() failure... 
     } 
    } 
相关问题