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 中国語 Web サイトの他の関連記事を参照してください。