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