【发布时间】:2011-12-14 05:27:56
【问题描述】:
我想检查 Windows 操作系统的版本是否为 Windows 2008 或更高版本。我正在使用以下代码,它在我的环境中运行良好,但有人(客户)报告说它不适用于他们的生产操作系统环境,但适用于具有 Windows 2008 R2 SP1 的其他系统。它不起作用意味着即使操作系统是 Windows 2008 R2 SP1,它也会返回 false。代码有什么问题?
bool CheckIfOperatingISWindowsServer2K8orAbove()
{
OSVERSIONINFOEX winOSInfo;
winOSInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
GetVersionEx(&winOSInfo);
//Check if windows version is 6 (i.e longhorn) and its windows server
if( winOSInfo.dwPlatformId==VER_PLATFORM_WIN32_NT && winOSInfo.dwMajorVersion == 6 && winOSInfo.wProductType == VER_NT_SERVER)
{
if ( winOSInfo.dwMinorVersion == 0 || winOSInfo.dwMinorVersion == 1 )
return true;
}
return false;
}
我认为唯一缺少的部分是没有使用 ZeroMemory(&winfo, sizeof(OSVERSIONINFOEX)); 将 winOSInfo 初始化为值 0;
你有什么看法?您认为不初始化 OSVERSIONINFOEX 结构会导致此类问题吗?
提前致谢。
【问题讨论】:
标签: c++ windows winapi visual-c++ windows-server-2008-r2