如何判断我的应用程序是作为32位还是64位应用程序运行的?

如何判断我的应用程序(在Visual Studio 2008中编译为“ 任何CPU” )是作为32位还是64位应用程序运行的?

if (IntPtr.Size == 8) { // 64 bit machine } else if (IntPtr.Size == 4) { // 32 bit machine } 

如果您使用的是.NET 4.0,那么对于当前的stream程来说,

 Environment.Is64BitProcess 

参考: Environment.Is64BitProcess属性 (MSDN)

我从Martijn Boven发现了这个代码,

 public static bool Is64BitMode() { return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8; } 

这个来自Microsoft All-In-One Code Framework的代码示例可以回答你的问题:

在C#中检测进程运行平台(CSPlatformDetector)

CSPlatformDetector代码示例演示了与平台检测相关的以下任务:

  1. 检测当前操作系统的名称。 (例如“Microsoft Windows 7 Enterprise”)
  2. 检测当前操作系统的版本。 (例如“Microsoft Windows NT 6.1.7600.0”)
  3. 确定当前的操作系统是否是64位操作系统。
  4. 确定当前进程是否是64位进程。
  5. 确定在系统上运行的任意进程是否为64位。

如果您只想确定当前正在运行的进程是否是64位进程,则可以使用.NET Framework 4中新增的Environment.Is64BitProcess属性。

如果要检测在系统上运行的任意应用程序是否是64位进程,则需要确定OS位数,如果是64位,则使用目标进程句柄调用IsWow64Process()

 static bool Is64BitProcess(IntPtr hProcess) { bool flag = false; if (Environment.Is64BitOperatingSystem) { // On 64-bit OS, if a process is not running under Wow64 mode, // the process must be a 64-bit process. flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag); } return flag; } 

在.Net标准中,您可以使用System.Runtime.InteropServices.RuntimeInformation.OSArchitecture