GetVersionEx не работает на Windows 7?



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



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

3 ответов:

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

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

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

Возможно GetProductInfo можешь делать, что хочешь?

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

Работает на Windows7, 32-бит.

Comments

    Ничего не найдено.