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

我试过了:

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

但它引发了一个x64进程的exception:

Win32Exception:只有ReadProcessMemory或WriteProcessMemory请求的一部分完成

Solutions Collecting From Web of "如何确定一个System.Diagnostics.Process是32位还是64位?"

您需要通过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_ProcessSystem.Diagnostics.Process都不提供任何显式属性。

如何迭代通过加载的模块( Process.modulees ),一个32位的进程将加载%WinDir%\syswow64\kernel32.dll而一个64位进程将从%WinDir%\system32\kernel32.dll加载它(这是一个DLL, 每个 Windows进程加载)。

NB。 当然,这个测试在x86操作系统实例上会失败。

Environment.Is64BitProcess可能是你在找什么。