GetVersionEx не работает на Windows 7? - PullRequest
6 голосов
/ 10 апреля 2010

В моей системе Windows 7 функция API GetVersionEx Windows возвращает «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)».

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

Ответы [ 3 ]

9 голосов
/ 10 апреля 2010

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

8 голосов
/ 10 апреля 2010

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

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

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

1 голос
/ 12 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...