GetVersionEx, не работающий над Windows 7?

В моей системе Windows 7 Windows API function GetVersionEx возвращается "6.0", указывая на Windows Vista, когда это должно возвратиться "6.1".

Если это имеет значение, я использовал следующий код Delphi:

function winver: string;
var
  ver: TOSVersionInfo;
begin
  ver.dwOSVersionInfoSize := SizeOf(ver);
  if GetVersionEx(ver) then
    with ver do
      result := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion) + '.' + IntToStr(dwBuildNumber) + ' (' + szCSDVersion + ')';
end;

и строка "6.0.6002 (Пакет обновления 2)" была возвращена.

Разве это не очень нечетно?

6
задан Andreas Rejbrand 10 April 2010 в 12:20
поделиться

3 ответа

Теперь я обнаружил, что GetVersionEx возвращает Vista, когда мое приложение запускается через отладчик Delphi 2009, но Windows 7, когда приложение выполняется самостоятельно. Я также обнаружил, что RAD Studio (IDE Delphi) действительно работает в режиме совместимости для Windows Vista SP2. Следовательно, все имеет смысл, поскольку, как указал kibab, дочерний процесс "наследует" настройки совместимости своего родительского процесса.

9
ответ дан 8 December 2019 в 12:58
поделиться

Думаю, это может быть только ты. т.е. ваш D2009 мог быть отмечен окнами как требующий запуска в режиме совместимости. Я создал тестовое приложение с вашей функцией, скомпилировал и запустил как с D2009, так и с D2010, внутри отладчика и извне (щелкните значок exe в проводнике Windows), и во всех 4 случаях он возвращался с: 6.1.7600 ()

Работает в Windows7, 32-разрядная версия.

1
ответ дан 8 December 2019 в 12:58
поделиться

Выполняется ли ваш исполняемый файл с определенными настройками совместимости (я предполагаю, что это может быть в случае устаревших приложений Delphi)? В документации к GetVersionEx говорится:

Если действует режим совместимости, функция GetVersionEx сообщает об операционной системе в том виде, в каком она себя идентифицирует, что может не быть установленной операционной системой. Например, если действует режим совместимости, GetVersionEx сообщает об операционной системе, выбранной для совместимости приложений.

Может быть GetProductInfo сможет делать то, что вы хотите?

8
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: