Win32 例外なしで Process.MainModule.FileName にアクセスする
Process.GetProcessById メソッドを使用して実行中のプロセスへのパスを取得する場合、次のことが可能です。 Win32Exception が発生し、MainModule.FileName プロパティにアクセスできなくなります。この例外は、特定のプロセスからモジュール情報を取得しようとすると発生します。
解決策:
この問題を回避するには、Jeff Mercado によって概説された方法を採用できます。次のコードは、特定のプロセスの完全なファイルパスを取得する方法を示しています。
string s = GetMainModuleFilepath(2011);
GetMainModuleFilepath メソッドの実装は次のとおりです。
private string GetMainModuleFilepath(int processId) { string wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId; using (var searcher = new ManagementObjectSearcher(wmiQueryString)) { using (var results = searcher.Get()) { ManagementObject mo = results.Cast<ManagementObject>().FirstOrDefault(); if (mo != null) { return (string)mo["ExecutablePath"]; } } } return null; }
Windows Management Instrumentation (WMI) を利用するを使用すると、Win32Exception をトリガーせずにプロセス情報をクエリし、実行可能パスを抽出できます。
以上がWin32Exception を発生させずに Process.MainModule.FileName にアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。