我正在尝试获取当前用户(Environment.UserName
)当前拥有的进程列表.不幸的是,Process
该类没有任何方法来获取用户拥有进程的UserName.
如何获取用户的UserName,该用户是使用Process
该类的进程的所有者,因此我可以将其与之进行比较Environment.UserName
?
如果您的解决方案需要pinvoke
,请提供代码示例.
谢谢,你的回答让我走上了正确的道路.对于那些需要代码示例的人:
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(); } }
在CodeProject上的文章如何让流程所有者的ID和当前用户的SID由Warlib介绍了如何同时使用WMI,并使用通过的PInvoke在Win32 API来做到这一点.
WMI代码更简单,但执行速度较慢.您的问题并未表明哪种情况更适合您的方案.