我正在尝试获取当前用户(Environment.UserName)当前拥有的进程列表.不幸的是,Process该类没有任何方法来获取用户拥有进程的UserName.
如何获取用户的UserName,该用户是使用Process该类的进程的所有者,因此我可以将其与之进行比较Environment.UserName?
如果您的解决方案需要pinvoke,请提供代码示例.
And*_*ore 16
谢谢,你的回答让我走上了正确的道路.对于那些需要代码示例的人:
public class App
{
public static void Main(string[] Args)
{
Management.ManagementObjectSearcher Processes = new Management.ManagementObjectSearcher("SELECT * FROM Win32_Process");
foreach (Management.ManagementObject Process in Processes.Get()) {
if (Process["ExecutablePath"] != null) {
string ExecutablePath = Process["ExecutablePath"].ToString();
string[] OwnerInfo = new string[2];
Process.InvokeMethod("GetOwner", (object[]) OwnerInfo);
Console.WriteLine(string.Format("{0}: {1}", IO.Path.GetFileName(ExecutablePath), OwnerInfo[0]));
}
}
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*rth 11
在CodeProject上的文章如何让流程所有者的ID和当前用户的SID由Warlib介绍了如何同时使用WMI,并使用通过的PInvoke在Win32 API来做到这一点.
WMI代码更简单,但执行速度较慢.您的问题并未表明哪种情况更适合您的方案.