检测Windows的32位或64位

我想检测当前的Windows操作系统是32位还是64位。 如何使用C ++实现它? 我不想处理器types我想OS的位types。 这是因为您可以在64位处理器上安装32位操作系统。

要调用的函数是IsWow64Process 。 它告诉您的32位应用程序是否在64位Windows上运行。

如果程序编译为64位,它已经知道了。

如果您的代码是64位并且正在运行,那么Windows是64位的 – 无需检查。 如果您的进程是32位调用IsWow64Process() – 在64位Windows上的WOW64中运行32位进程,否则不使用WOW64。

 bool getWindowsBit(bool & isWindows64bit) { #if _WIN64 isWindows64bit = true; return true; #elif _WIN32 BOOL isWow64 = FALSE; //IsWow64Process is not available on all supported versions of Windows. //Use GetModuleHandle to get a handle to the DLL that contains the function //and GetProcAddress to get a pointer to the function if available. LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); if(fnIsWow64Process) { if (!fnIsWow64Process(GetCurrentProcess(), &isWow64)) return false; if(isWow64) isWindows64bit = true; else isWindows64bit = false; return true; } else return false; #else assert(0); return false; #endif } 

如果您的应用程序是32位应用程序,那么您可以使用IsWow64Process,如果您的应用程序是在64位操作系统上运行,那么可以使用IsWow64Process ,否则它是32位

您需要使用GetNativeSystemInfo 。 考虑到您希望这可以在32位操作系统上工作,您需要使用LoadLibrary + GetProcAddress以便您可以处理此function不可用。 所以如果失败了,你知道这是一个32位的操作系统。 否则, SYSTEM_INFO.wProcessorArchitecture将为您提供真实的处理器types,而不是仿真的处理器types。

使用GetNativeSystemInfo函数。 它得到一个LPSYSTEM_INFO参数来得到你想要的。

SYSTEM_INFO结构:

wProcessorArchitecture
已安装的操作系统的处理器体系结构。

你可以在你的程序中运行windows命令systeminfo作为一个进程。

 #include <stdlib.h> system("systeminfo"); 

其中一个返回类别是系统types。

其输出显示如下: System Type: x86-based PCSystem Type: x64-based PC

这可能是一个比其他人提供的解决scheme更为复杂的解决scheme,但我想我会把它作为一种可能性join。 (也许你是在附加信息之后。)

下面是另一种方法: GetSystemWow64Directory – “检索WOW64使用的系统目录的path,该目录在32位Windows上不存在。 和“在32位Windows上,该函数总是失败,并且扩展错误设置为ERROR_CALL_NOT_IMPLEMENTED

我个人不知道IsWow64Process的用法,因为在MSDN中的IsWow64Process的描述中有文字“请注意,这种技术不是一个可靠的方法来检测操作系统是否是64位版本的Windows,因为Kernel32 .dll在当前版本的32位Windows中也包含此function。“

一个简单的检查是如果EXE不运行,那么它是一个在32位机器上运行的64位可执行文件。 64位机器将始终运行32位可执行文件。

从微软 ,

大多数为32位版本的Windowsdevise的程序都可以在64位版本的Windows上运行。 值得注意的例外是许多防病毒程序。

devise用于32位版本的Windows的设备驱动程序在运行64位版本的Windows的计算机上不起作用。 如果您尝试安装仅具有32位驱动程序的打印机或其他设备,则在64位版本的Windows上无法正常工作。

但是,在Windows中,您还可以检查是否存在Program Files(x86)文件夹,作为另一个简单检查。 不需要看中。

  static bool is64bitOS() { SYSTEM_INFO si; GetSystemInfo(&si); if((si.wProcessorArchitecture & PROCESSOR_ARCHITECTURE_IA64)||(si.wProcessorArchitecture & PROCESSOR_ARCHITECTURE_AMD64)==64) { return true; } else { return false; } }