【发布时间】:2021-10-01 06:15:01
【问题描述】:
我使用 TOSVersion.ToString 函数(使用 SysUtils)来检测 Windows 版本。然而,这是我在 Windows11 中得到的:
Windows 10 (Version 10.0, Build 21996, 64-bit Edition)
是否有任何可靠的方法来检测 Windows 11?我正在使用 Delphi 10.3.3。
更新:Windows 11 正式发布,我再次尝试。 这是我得到的:
Windows 10 (Version 10.0, Build 22000, 64-bit Edition)
【问题讨论】:
-
我想如果内部版本号大于20000
-
“我使用 TOSVersion.ToString 函数(使用 SysUtils)来检测 Windows 版本。”这对我来说听起来很糟糕。
-
是否有特殊原因需要检测 Windows 版本?通常最好在运行时检测您需要的功能的存在,而不是依赖特定的版本号。尤其是近年来,微软确实在不遗余力地隐藏版本号,并弃用能够检索它们的 API。
-
@Andrzej 但是为什么?除了显示它,你用这些信息控制什么样的逻辑?在任何情况下,获取操作系统版本号的最佳方法之一是在
Ntdll.dl中使用RtlGetVersion(),即不受(尚未?)受清单虚拟化影响。 Windows 11 尚未公开发布,仅在预览版中。它甚至还没有为应用清单定义正确的supportedOSguid。 -
内部版本号截止不是 20000 而是 22000。或者如果您想捕获泄露的 beta 21996,但这样做可能会由于它不完整而导致兼容性问题。
标签: delphi delphi-10.3-rio windows-11