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

本文关键字:获取 取进程 所有者 操作系统 中的 | 更新日期: 2023-09-27 17:56:37

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

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

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

您可能会获得"无所有者"的可能原因:

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

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