我正在寻找名为“MyApp.exe”的进程,并且我想确保我得到的进程属于特定用户。
我使用以下代码获取进程列表:
Process[] processes = Process.GetProcessesByName("MyApp");
这给了我一个进程列表,但是在 Process 类中似乎没有办法确定谁拥有该进程?关于如何做到这一点有什么想法吗?
最佳答案
您可以使用 WMI 获取拥有特定进程的用户。要使用 WMI,您需要将对 System.Management.dll
的引用添加到您的项目中。
按进程 ID:
public string GetProcessOwner(int processId)
{
string query = "Select * From Win32_Process Where ProcessID = " + processId;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject obj in processList)
{
string[] argList = new string[] { string.Empty, string.Empty };
int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
{
// return DOMAIN\user
return argList[1] + "\\" + argList[0];
}
}
return "NO OWNER";
}
按进程名(只查找第一个进程,相应调整):
public string GetProcessOwner(string processName)
{
string query = "Select * from Win32_Process Where Name = \"" + processName + "\"";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject obj in processList)
{
string[] argList = new string[] { string.Empty, string.Empty };
int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
{
// return DOMAIN\user
string owner = argList[1] + "\\" + argList[0];
return owner;
}
}
return "NO OWNER";
}
关于c# - 在 C# 中如何确定进程的所有者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777548/