识别 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中文网其他相关文章!