7

私は試した:

process.MainModule.FileName.Contains("x86")

しかし、x64プロセスの例外が発生しました。

Win32Exception:ReadProcessMemoryまたはWriteProcessMemoryリクエストの一部のみが終了しました

4

3 に答える 3

12

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;
}
于 2010-08-26T15:43:18.750 に答える
1

WMIも、明示的なプロパティも提供していWin32_Processません。System.Diagnostics.Process

ロードされたモジュール(Process.Modules)を反復処理する場合は、32ビットプロセスがロードされ%WinDir%\syswow64\kernel32.dll、64ビットプロセスがロードされます(これは、すべてのWindowsプロセスがロード%WinDir%\system32\kernel32.dllする1つのdllです)。

NB。もちろん、このテストはx86OSインスタンスでは失敗します。

于 2010-08-26T15:13:31.843 に答える
1

Environment.Is64BitProcessおそらくあなたが探しているものです。

于 2010-08-26T15:15:08.930 に答える