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

时间:2008-11-05 18:08:28

标签: c# 64-bit 32-bit

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

4 个答案:

答案 0 :(得分:141)

如果您使用的是.NET 4.0,那么它就是当前流程的单行代码:

Environment.Is64BitProcess

参考: Environment.Is64BitProcess Property (MSDN)

答案 1 :(得分:63)

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

答案 2 :(得分:5)

我发现Martijn Boven中的代码可以解决这个问题:

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

答案 3 :(得分:5)

Microsoft All-In-One Code Framework中的此代码示例可以回答您的问题:

Detect the process running platform in C# (CSPlatformDetector)

  

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

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

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

如果要检测是否在系统上运行任意应用程序 是一个64位进程,你需要确定操作系统的位数,如果它是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;
}