32ビットアプリケーションからプロセス情報を取得するために、以下のコードを使用しています。
var process = Process.GetProcessById((int)processID);
if (process != null && process.MainModule != null && process.MainModule.FileVersionInfo != null)
{
windowInfo.CompanyName = process.MainModule.FileVersionInfo.CompanyName;
windowInfo.FileDescription = process.MainModule.FileVersionInfo.FileDescription;
windowInfo.FileName = process.MainModule.FileVersionInfo.FileName;
windowInfo.FileVersion = process.MainModule.FileVersionInfo.FileVersion;
windowInfo.ProductName = process.MainModule.FileVersionInfo.ProductName;
windowInfo.ProductVersion = process.MainModule.FileVersionInfo.ProductVersion;
}
Win32Exception
64ビットプロセスについて同じクエリを実行するとスローされます。この投稿に記載されている解決策に従って、独立したアプリケーションで同じことを試しましたが、アプリケーションを64ビットに変更すると機能しました。メインアプリケーションで同じことを行うことはできません。
誰かが回避策を持っていますか?「if」本体内のパラメータをクエリしたいだけです。
さらに詳しい情報が必要な場合はお知らせください。
このソリューションは私のために働きました:x86アプリケーションからx64プロセスのメインモジュールの場所を取得しますか?
WMIクエリの関連情報を使用しました。
(from item in searcher.Get().Cast<ManagementObject>()
where ((UInt32?)item["ProcessId"]).HasValue && ((UInt32?)item["ProcessId"]).Value == processID
select new Win32Process()
{
ExecutablePath = System.Convert.ToString(item["ExecutablePath"]),
ProcessId = (UInt32?)item["ProcessId"],
}).ToArray();
返される配列には、32ビットアプリケーションから起動された場合でも、64ビットアプリケーションの情報も含まれます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加