c# - 在 C# 中如何确定进程的所有者?

标签 c# .net process

我正在寻找名为“MyApp.exe”的进程,并且我想确保我得到的进程属于特定用户。

我使用以下代码获取进程列表:

Process[] processes = Process.GetProcessesByName("MyApp");

这给了我一个进程列表,但是在 Process 类中似乎没有办法确定谁拥有该进程?关于如何做到这一点有什么想法吗?

最佳答案

您可以使用 WMI 获取拥有特定进程的用户。要使用 WMI,您需要将对 System.Management.dll 的引用添加到您的项目中。

按进程 ID:

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

按进程名(只查找第一个进程,相应调整):

public string GetProcessOwner(string processName)
{
    string query = "Select * from Win32_Process Where Name = \"" + processName + "\"";
    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
            string owner = argList[1] + "\\" + argList[0];
            return owner;       
        }
    }

    return "NO OWNER";
}

关于c# - 在 C# 中如何确定进程的所有者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777548/

相关文章:

c# - C# winform 中的波斯语 RadDateTimePicker?

c# - 附加到 shell 扩展中的默认工具提示

.net 绘图 : problems scaling a pen

c# - 我应该实例化一个新的委托(delegate)吗?

c# - 无效的文件名。 TitleContainer.OpenStream 需要一个相对 URI

powershell - Powershell 中的后台作业

python - 如何知道当前哪个进程正在系统上下载某些内容?

c# - 使用 Json.NET 反序列化这种数据

c# - 在 c# winforms 中的窗体之间传递数据的最安全方法

php - PHP解析器在阅读评论时是否需要微时间