在 C# 中确定进程所有权
获取进程的所有者是管理系统资源时的一项基本任务。在这种情况下,您正在寻求一种方法来识别名为“MyApp.exe”的进程的所有者,即使在检索进程列表之后也是如此。
虽然 Process 类提供了基本的进程信息,但它缺乏以下功能以确定所有权。为了应对这一挑战,可以采用 Windows Management Instrumentation (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"; }
方法 2:按进程名称
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"; }
通过利用这些基于 WMI 的方法,您可以使用进程 ID 或名称有效地确定进程的所有者。这些信息对于分析系统流程并相应地定制您的应用程序非常宝贵。
以上是如何使用 C# 进程的 ID 或名称确定其所有者?的详细内容。更多信息请关注PHP中文网其他相关文章!