C# での Process.MainModule.FileName へのアクセス: Win32 例外の回避
C# で Process.MainModule.FileName プロパティにアクセスしようとすると、開発者は Win32Exception に遭遇する可能性があります。この例外は通常、アプリケーションを 32 ビット (x86) または AnyCPU 環境用に再コンパイルしているにもかかわらず、64 ビット プラットフォームでプロセス モジュールを列挙しているときに発生します。
問題のコードは、次の形式をとることがよくあります。
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
この問題に対処するために、開発者は、参考回答で提案されているように、Jeff Mercado が提供するコードを利用できます。このコードは、特定のプロセスのファイルパスを取得するために少し変更されています:
string s = GetMainModuleFilepath(2011);
GetMainModuleFilepath メソッドは、Windows Management Instrumentation (WMI) を利用して、Win32_Process クラスに ExecutablePath プロパティをクエリします:
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; }
このアプローチを利用することで、開発者は Win32Exception を回避し、指定されたプロセスの MainModule.FileName。
以上がC# で Process.MainModule.FileName にアクセスするときに Win32Exceptions を回避する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。