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構造を初期化しないと思いますか?
ありがとうございます。
これは問題なく動作しました。ドメインコントローラwProductTypeがVER_NT_DOMAIN_CONTROLLERとして返されます。ありがとう、私は今この問題を修正しました。 – Rahul
@Rahul:明白なことは 'winOSInfo.wProductType!= VER_NT_WORKSTATION'をチェックすることです –