私は試した:
process.MainModule.FileName.Contains("x86")
しかし、x64プロセスの例外が発生しました。
Win32Exception:ReadProcessMemoryまたはWriteProcessMemoryリクエストの一部のみが終了しました
私は試した:
process.MainModule.FileName.Contains("x86")
しかし、x64プロセスの例外が発生しました。
Win32Exception:ReadProcessMemoryまたはWriteProcessMemoryリクエストの一部のみが終了しました
P/Invokeを介してIsWow64Processを呼び出す必要があります。
[DllImport( "kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi )]
[return: MarshalAs( UnmanagedType.Bool )]
public static extern bool IsWow64Process( [In] IntPtr processHandle, [Out, MarshalAs( UnmanagedType.Bool )] out bool wow64Process );
呼び出しを少し簡単にするためのヘルパーは次のとおりです。
public static bool Is64BitProcess( this Process process )
{
if ( !Environment.Is64BitOperatingSystem )
return false;
bool isWow64Process;
if ( !IsWow64Process( process.Handle, out isWow64Process ) )
throw new Win32Exception( Marshal.GetLastWin32Error() );
return !isWow64Process;
}
WMIも、明示的なプロパティも提供していWin32_Process
ません。System.Diagnostics.Process
ロードされたモジュール(Process.Modules
)を反復処理する場合は、32ビットプロセスがロードされ%WinDir%\syswow64\kernel32.dll
、64ビットプロセスがロードされます(これは、すべてのWindowsプロセスがロード%WinDir%\system32\kernel32.dll
する1つのdllです)。
NB。もちろん、このテストはx86OSインスタンスでは失敗します。
Environment.Is64BitProcess
おそらくあなたが探しているものです。