識別 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中文網其他相關文章!