如何获得进程所有者的UserName?

And*_*ore 16 .net c# process

我正在尝试获取当前用户(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代码更简单,但执行速度较慢.您的问题并未表明哪种情况更适合您的方案.