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


70

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

Answers:



159

如果您使用的是.NET 4.0,则它是当前流程的一线工具:

Environment.Is64BitProcess

参考:Environment.Is64BitProcess属性(MSDN)


2
感谢您发布答案,非常高兴知道。我不会更改当前接受的答案,因为该问题最初是关于.NET 3.5的,但是我鼓励人们也投票赞成您的答案。
劳伦斯·约翰斯顿

5

我从Martijn Boven那里找到了实现此目的的代码:

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

25
很可能更有效调用,而不是Marshal.SizeOf(typeof运算(IntPtr的))IntPtr.Size
JaredPar

5

Microsoft多合一代码框架中的以下代码示例可以回答您的问题:

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

1
可以是一个有用的库,在这种情况下有点过分:)。
Gert Arnold

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.