如何确定System.Diagnostics.Process是32位还是64位?

Jad*_*ias 5 .net windows 64-bit system.diagnostics process

我试过了:

process.MainModule.FileName.Contains("x86")
Run Code Online (Sandbox Code Playgroud)

但它引发了x64进程的异常:

Win32Exception:只有部分ReadProcessMemory ou WriteProcessMemory请求完成

Phi*_*ney 8

你需要通过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 );
Run Code Online (Sandbox Code Playgroud)

这是一个让它更容易调用的助手:

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 此方法将在 32 位 Windows 中失败 (2认同)
  • 在 32 位 Windows 上,所有进程都是 32 位,因此无需进行检查。我已经编辑了 Is64BitProcess 来反映这一点。 (2认同)