繁体   English   中英

如何在C#中的64位OS中获取进程所有者名称

[英]How to get process owner name in 64 bit OS in C#

如何确定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位进程的进程所有者名称。

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

您可能会收到“没有所有者”的可能原因:

  • 您试图获取您没有权限的所有者(例如,您以非特权用户身份运行,但是试图获取特权用户的所有者)。
  • 您试图获取伪进程的所有者(例如,PID为4的“系统”或PID为0的“系统空闲进程”)。

顺便说一句,服务也有所有者(关于@weismat评论)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM