首页 >后端开发 >C++ >如何在 C# 中确定进程的所有者?

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

DDD
DDD原创
2025-01-17 11:51:10439浏览

How Can I Determine the Owner of a Process in C#?

识别 C# 应用程序中的进程所有者

确定与正在运行的进程关联的用户帐户对于各种 C# 应用程序至关重要,特别是在管理系统资源或安全性时。虽然内置 Process 类缺乏此功能,但 Windows Management Instrumentation (WMI) 提供了强大的解决方案。

利用 WMI 检索进程所有权

WMI 提供 GetOwner 方法来检索进程的所有者。 在使用此方法之前,请确保您已在项目中添加对 System.Management.dll 的引用。

通过进程 ID 检索所有者:

以下代码片段演示了如何使用进程ID获取进程所有者:

<code class="language-csharp">public string GetProcessOwner(int processId)
{
    string query = $"Select * From Win32_Process Where ProcessID = {processId}";
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
    {
        using (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 $"{argList[1]}\{argList[0]}";
                }
            }
        }
    }
    return "NO OWNER";
}</code>

通过进程名称检索所有者:

同样,您可以根据进程名称识别所有者:

<code class="language-csharp">public string GetProcessOwner(string processName)
{
    string query = $"Select * from Win32_Process Where Name = \"{processName}\"";
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
    {
        using (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 $"{argList[1]}\{argList[0]}";
                }
            }
        }
    }
    return "NO OWNER";
}</code>

两种方法都以“DOMAINuser”格式返回所有者。 使用 using 语句可确保正确的资源处置。 此方法有效地利用 WMI 来确定 C# 应用程序中的进程所有权。

以上是如何在 C# 中确定进程的所有者?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn