2011-12-14 62 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

相關問題