日期:2014-05-17  浏览次数:20926 次

软件作者如何分辨用户使用的是64位还是32位的WINDOWS
如题,现在设计一个程序需要分辨用户是64位的系统还是32位的系统,来安装相应文件。
有API提供API,木有的话给点可行性建议。

非常感谢。

------解决方案--------------------

BOOL IsWow64()
{

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process");

BOOL bIsWow64 = FALSE;
 
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
MessageBox(NULL,TEXT("Can not fnIsWow64Process! "),TEXT("unknown errors"),MB_OK);
return bIsWow64;
}
}
return bIsWow64;
}

------解决方案--------------------
楼上的方法只对32位程序有效,如果将程序编译为x64版本,那么就无法区分出当前系统是x86还是x64,看MSDN中IsWow64Process函数的说明: 
A pointer to a value that is set to TRUE if the process is running under WOW64. If the process is running under 32-bit Windows, the value is set to FALSE. If the process is a 64-bit application running under 64-bit Windows, the value is also set to FALSE.

一种通用且简单的方法判断系统是x64还是x86可以用如下代码: 
C/C++ code

SYSTEM_INFO si;

GetSystemInfo(&si);

if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || 
    si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
    MessageBox(L"is x64 version",L"",MB_OK);
else
    MessageBox(L"is x86 version",L"",MB_OK);

------解决方案--------------------
探讨

------解决方案--------------------
又不是判断系统具体版本和类型,仅仅判断64位和32位有这复杂么? 一个API不就可以了。

给楼主个参考:GetSystemWow64Directory (获取64位系统文件夹路径)

这个在32位系统下总是返回错误,依靠这个不就可以判断出是64位还是32位了

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724340(v=VS.85).aspx