GetVersionEx在Windows 7上不起作用?

时间:2010-04-10 12:20:16

标签: delphi winapi windows-7

在我的Windows 7系统上,当should返回“6.1”时,GetVersionEx Windows API函数返回“6.0”,表示Windows Vista。

如果重要,我使用了以下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)”。

这不是很奇怪吗?

3 个答案:

答案 0 :(得分:9)

我现在发现GetVersionEx在我的应用程序通过Delphi 2009调试器运行时返回Vista,而Windows 7则在应用程序单独执行时返回。我还发现RAD Studio(Delphi IDE)实际上是在Windows Vista SP2的兼容模式下运行的。因此,一切都是有道理的,因为正如kibab所指出的,子进程将“继承”其父进程的兼容性设置。

答案 1 :(得分:8)

您的可执行文件是否在定义了任何兼容性设置的情况下运行(我认为这可能是旧版Delphi应用程序的情况)? GetVersionEx州的文件:

  

如果兼容模式有效,则GetVersionEx函数会在操作系统识别自身时报告操作系统,该操作系统可能不是已安装的操作系统。例如,如果兼容模式生效,GetVersionEx将报告为应用程序兼容性而选择的操作系统。

也许GetProductInfo能做你想做的事吗?

答案 2 :(得分:1)

我认为可能只是你。即您的D2009可能已被Windows标记,因为需要在兼容模式下运行。 我用你的函数制作了一个测试应用程序,并使用D2009和D2010编译并运行,在调试器内部和外部(单击windows explorer中的exe),对于所有4个案例,它返回:6.1.7600()< / p>

在Windows7,32位上运行。