Dot-Net

如何確定 System.Diagnostics.Process 是 32 位還是 64 位?

  • August 27, 2010

我試過了:

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;
}

引用自:https://stackoverflow.com/questions/3575785