実行中のプロセスの列挙を伴う C# プロジェクトで、Process.MainModule の FileName プロパティに確実にアクセスするプロセスは、「プロセス モジュールの一覧表示中にエラーが発生しました」というメッセージを含む Win32Exception エラーを引き起こす可能性があります。この問題は、コンパイル ターゲット (x86、AnyCPU) に関係なく発生します。
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
Jeff Mercado が提案したように、Windows Management Instrumentation ( WMI) を使用すると、このエラーを回避できます。具体的には、Win32_Process クラスの ExecutablePath プロパティを使用して、メイン モジュール ファイルのパスを取得できます。
string s = GetMainModuleFilepath(2011);
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; }
以上がProcess.MainModule.FileName にアクセスすると Win32Exceptions がスローされるのはなぜですか? WMI はどのように解決策を提供できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。