我想检查Windows操作系统的版本是否为Windows 2008或更高版本。我正在使用以下代码,它在我的环境中可以正常工作,但是有人(客户)报告说它不能在其生产OS环境中工作,但可以在具有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结构会导致此类问题?

提前致谢。

最佳答案

您能否与客户确认他们的服务器2008 R2是否配置为域 Controller ?

因为在结构OSVERSIONINFOEX的文档中已指出,所以在wProductType/VER_NT_SERVER中:



在这种情况下,您的代码将无法获得预期的结果。

09-30 11:48