繁体   English   中英

如何在.net中获取进程的用户名或所有者

[英]How to get the user name or owner of a process in .net

如何在C#中找到给定进程的所有者? System.Diagnostics.Process类似乎没有任何属性或方法可以获取此信息。 我认为它必须是可用的,因为它显示在Windows任务管理器的“用户名”列下。

我的具体方案涉及查找作为“本地服务”运行的进程实例(例如taskhost.exe)。 我知道如何使用找到taskhost的所有实例

Process.GetProcessesByName("taskhost")

所以现在我只需要知道如何识别作为本地服务运行的那个。

使用WMI检索Win32_Process类的实例,然后在每个实例上调用GetOwner方法以获取运行该进程的用户的域名和用户名。 添加对System.Management程序集的引用后,应该启动以下代码:

// The call to InvokeMethod below will fail if the Handle property is not retrieved
string[] propertiesToSelect = new[] { "Handle", "ProcessId" };
SelectQuery processQuery = new SelectQuery("Win32_Process", "Name = 'taskhost.exe'", propertiesToSelect);

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(processQuery))
using (ManagementObjectCollection processes = searcher.Get())
    foreach (ManagementObject process in processes)
    {
        object[] outParameters = new object[2];
        uint result = (uint) process.InvokeMethod("GetOwner", outParameters);

        if (result == 0)
        {
            string user = (string) outParameters[0];
            string domain = (string) outParameters[1];
            uint processId = (uint) process["ProcessId"];

            // Use process data...
        }
        else
        {
            // Handle GetOwner() failure...
        }
    }

您可以在进程上使用Handle属性,并通过P / Invoke层将其传递给GetSecurityInfo,以获取有关该进程的安全信息。

它和这个问题一样:

如何获取任意进程的SID /会话?

可能想在此链接上尝试代码

谷歌搜索“C#get process owner”的第一个结果

很可能任务管理器通过C使用Win32 API来执行此操作。 该过程也在上面的链接中列出。

暂无
暂无

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

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