2011-12-14 105 views
2

我想检查Windows操作系统的版本是否为Windows 2008或更高版本。我正在使用下面的一段代码,它在我的环境中工作得很好,但有人(客户)已经报告说它不适用于其生产操作系统环境,但适用于具有Windows 2008 R2 SP1的其他系统。这不起作用意味着即使在操作系统是Windows 2008 R2 SP1的情况下它也会返回错误。代码有什么问题?在Windows 2008 R2 SP1上使用GetVersionEx时行为不正确

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; 
} 

我想的唯一缺少的一部分未被初始化winOSInfo使用ZeroMemory(& winfo,的sizeof(OSVERSIONINFOEX))为值0;

您的意见是?你认为不初始化OSVERSIONINFOEX结构会导致这种问题吗?

在此先感谢。

回答

4

您可以检查您的客户是否将其服务器2008 R2配置为域控制器?

因为OSVERSIONINFOEX它被指示时,在wProductType/VER_NT_SERVER该结构的文档中:

注意,这也是一个域控制器报告为VER_NT_DOMAIN_CONTROLLER,不VER_NT_SERVER的服务器。

而在这种情况下,您的代码不会给出预期的结果。

+0

它工作得很好。对于域控制器,wProductType返回为VER_NT_DOMAIN_CONTROLLER。谢谢我现在解决了这个问题。 – Rahul 2011-12-14 06:33:22

相关问题