在更高版本中,带有应用程序清单的Win32 GetVersionEx API是否会中断



我有一个报告和/或检测Windows操作系统版本的程序。它使用GetVersionEx,但Microsoft故意破坏Windows 8.1及更高版本中的此API,以返回不正确的版本信息。(显然,正确的版本检查对大众来说太难了,但这是对另一个话题的咆哮。)

我知道我可以添加一个清单来解决这个特定的问题,但我的问题是关于"未来验证"程序。

如果未来的用户在比Windows 10更新的操作系统上运行该程序,即使程序的清单不包括该版本的GUID,GetVersionEx是否能正常工作并报告"真实"操作系统版本?

还是每次发布新的操作系统版本时,我都要不断地向清单中添加新的GUID?

如果未来的用户在比Windows 10更新的操作系统上运行该程序,即使程序的清单不包括该版本的GUID,GetVersionEx是否能正常工作并报告"真实"的操作系统版本?

NO,这是有记录的行为:

随着Windows 8.1的发布,GetVersionEx API的行为已经改变了它将为操作系统版本返回的值GetVersionEx函数返回的值现在取决于应用程序的表现方式

未在Windows 8.1或Windows 10中显示的应用程序将返回Windows 8操作系统版本值(6.2)。一旦某个应用程序在给定的操作系统版本中显示,GetVersionEx将始终返回该应用程序在未来版本中显示的版本要为Windows 8.1或Windows 10显示您的应用程序,请参阅确定您的Windows应用程序的目标。

还是每次发布新的操作系统版本时,我都要不断地向清单中添加新的GUID?

遗憾的是,。版本显示的要点是明确报告您的应用程序已知兼容的操作系统版本。显然,你不可能提前知道它是否与未来的版本兼容。因此,每当发布新版本时,您都会根据需要测试您的应用程序,验证它是否正常工作(如果需要,可以修复它),然后相应地更新清单。在此之前,Windows将降低自己的级别,使其表现得像您在清单中报告的最高操作系统版本。

无论如何,您不应该在运行时依赖GetVersionEx()来控制应用程序的功能。在日志等中报告操作系统版本是可以的(还有其他方法可以获得真实的操作系统版本,无论表现形式如何),但不要根据操作系统版本做出决定。例如,如果要使用仅在最新操作系统版本中可用的给定功能,请不要检查操作系统版本,检查功能本身是否存在,并在可用时使用它。

最新更新