【发布时间】:2016-05-04 19:33:58
【问题描述】:
我有一个程序可以报告和/或检测 Windows 操作系统版本。它使用GetVersionEx,但在 Windows 8.1 及更高版本中,Microsoft intentionally broke this API 会返回错误的版本信息。 (显然,正确的版本检查对于大众来说太难了,但这是另一个话题的咆哮。)
我知道我可以添加一个清单来解决这个特定问题,但我的问题是关于“面向未来”的程序。
如果未来的用户在比 Windows 10 更新的操作系统上运行程序,GetVersionEx 是否会正常工作并报告“真实”操作系统版本,即使程序的清单不包含该版本的 GUID?
或者我注定要在每次发布新的操作系统版本时不断向清单中添加新的 GUID?
【问题讨论】:
-
我相信查询操作系统版本最轻松/面向未来的方法是调用原生 API RtlGetVersion(如 how to detect windows 10 in c++ 中所述)。
-
@IInspectable:
RtlGetVersion()是获取 true 操作系统版本的几种可行方法之一。 WMI、NetServerGetInfo()和NetWkstaGetInfo()也可以使用。 -
我在发布问题后看到了这些技巧。
RtlGetVersion可能是做我需要的最简单的方法。谢谢! -
Microsoft 认可的方法(仅用于记录/诊断目的!)是从系统 DLL(例如 kernel32.dll)中读取版本号。见stackoverflow.com/a/25986612/886887
-
可能就像想向用户显示操作系统版本一样简单。
标签: winapi