如何确定执行程序是否为64位编译?

时间:2009-03-11 18:51:31

标签: c# 64-bit

我需要我的程序来确定它是为32位窗口还是64位/任何CPU编译的。我需要根据编译选项选择不同的COM服务器标志。有什么想法吗?

9 个答案:

答案 0 :(得分:7)

如果您运行的是64位应用程序,请在运行时进行检查:

要查看您的进程是64位还是32位,只需检查 IntPtr.Size 或任何其他指针类型即可。如果你得到4,那么你运行的是32位。如果你得到8,那么你运行的是64位。

您的流程运行的计算机类型为:

您可以检查PROCESSOR_ARCHITECTURE环境变量,以查看您是否在x64,ia64或x86计算机上运行。

您的流程是否在仿真下运行:

Win32 API IsWow64Process将告诉您是否在x64下运行32位应用程序。 Wow64表示windows64上的windows32。

与其他人发布的内容相反:IsWow64Process不会告诉您是否正在运行32位或64位应用程序。在32位计算机上,它会告诉您运行时32位应用程序的FALSE,而在64位计算机上,它会告诉您32位应用程序的TRUE。它只会告诉您应用程序是否在仿真下运行。

答案 1 :(得分:3)

您知道Environment.Is64BitProcess吗? 它确定当前运行的进程是否为64位进程。

答案 2 :(得分:2)

您需要Microsoft的CORFLAGS命令行应用程序。 http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx

答案 3 :(得分:2)

您可以使用IsWow64Process函数在运行时确定您的COM服务器是x64还是win32进程。

如果您只是想在编译期间知道这一点:编译器设置_WIN64宏。

答案 4 :(得分:2)

使用GetBinaryType api函数,您将拥有文件类型

这是msdn http://msdn.microsoft.com/en-us/library/aa364819(VS.85).aspx

上api的链接

结果是:

SCS_32BIT_BINARY = 32位exe

SCS_64BIT_BINARY = 64位exe

SCS_DOS_BINARY = DOS

SCS_OS216_BINARY = OS / 2

SCS_WOW_BINARY = 16位

SCS_POSIX_BINARY =基于POSIX

SCS_PIF_BINARY =在DOS上执行的PIF文件

答案 5 :(得分:1)

您可以根据设置编译时常量并根据这些设置#ifs来设置一个值,您可以检查以查看应用程序的编译平台。请参阅Target platform/processor at compile time

最简单的方法是检查IntPtr.Size属性以查看它是4(32位)还是8(64位)。

答案 6 :(得分:1)

答案 7 :(得分:1)

虽然这似乎是一条奇怪的路线,但您可以通过检查IntPtr.Size来判断您是在32位(或WOW64中的64位)还是64位.NET代码中运行。

在32位/ WOW64上,IntPtr.Size为4。

在64位上,IntPtr.Size为8。

来源:MSDN上的Migrating 32-bit Managed Code to 64-bit Managed Code

答案 8 :(得分:0)

您可以使用预定义的宏来检查编译类型

   #if (_WIN64) 
        const bool IS_64 = true;
    #else
       const bool IS_64 = false;
    #endif