如何在C#中的64位操作系统中获取进程所有者名称

时间:2016-07-13 06:39:43

标签: c#

How do I determine the owner of a process in C#?

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";
}

我详细研究并实现了上面给出的代码。此代码工作正常,但只获取32位进程的所有者名称。该方法返回"没有所有者"对于64位进程。 请帮助我,我如何获得32位进程和64位进程的进程所有者名称。

1 个答案:

答案 0 :(得分:3)

不,该代码可以正常工作"罚款"。当你的代码是32位但目标进程是64位时,它也可以工作,所以这里也没有问题。

可能的原因,你可以得到"没有所有者":

  • 您正在尝试获取您没有权限的所有者(例如,您作为非特权用户运行,但尝试获取特权用户的所有者)。
  • 您正在尝试获取伪进程的所有者(例如"系统",使用PID 4,或"系统空闲进程"使用PID 0)。
BTW,服务也有所有者(关于@weismat评论)。