2011-12-14 14 views
2

WindowsオペレーティングシステムのバージョンがWindows 2008以上であるかどうかを確認します。私は次のコードを使用していますが、私の環境でうまく動作しますが、誰か(顧客)が本番OS環境では動作していないと報告しましたが、Windows 2008 R2 SP1を持つ他のシステムでも動作します。 OSがWindows 2008 R2 SP1の場合でもfalseを返すという意味では機能しません。コードの何が間違っていますか?私が唯一欠けている部分を考える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; 
} 

はZeroMemory(& winfo、はsizeof(OSVERSIONINFOEX))を使用して値0にwinOSInfoを初期化されていません。

あなたの意見は?この種の問題がOSVERSIONINFOEX構造を初期化しないと思いますか?

ありがとうございます。

答えて

4

お客様のサーバー2008 R2がドメインコントローラとして構成されているかどうかご確認いただけますか?

注また、ドメインコントローラがないVER_NT_SERVER VER_NT_DOMAIN_CONTROLLER、として報告されているサーバこと:それはwProductType/VER_NT_SERVERに、示されているのでOSVERSIONINFOEX構造のドキュメントに

この場合、コードでは期待した結果が得られません。

+0

これは問題なく動作しました。ドメインコントローラwProductTypeがVER_NT_DOMAIN_CONTROLLERとして返されます。ありがとう、私は今この問題を修正しました。 – Rahul

+0

@Rahul:明白なことは 'winOSInfo.wProductType!= VER_NT_WORKSTATION'をチェックすることです –

関連する問題