在 .NET Framework 中,获取可以使用的操作系统版本Environment.OSVersion
与Major
and Minor
告诉您 Windows 版本的值(即 6.1 = Windows 7、10.0 = Windows 10)。尽管 Windows 11 已经发布(开发版和测试版渠道)一个多月了,但文档尚未更新以提及如何检测 Windows 11。
对于 Windows API,GetVersion
已被永远弃用,甚至版本助手 API 也只能达到IsWindows10OrGreater
。是否有简单的检查来确定主要的 Windows 版本,特别是 Windows 11?有人有类似的问题,但对于 Delphi (如何使用 Delphi 10.3.3 检测 Windows 11 https://stackoverflow.com/questions/68510685/how-to-detect-windows-11-using-delphi-10-3-3)并且接受的答案都是黑客。为什么微软这么难提供一个简单的API来返回当前的系统版本呢?GetVersion
永远不应该被弃用。
这很可能并不完美,但这是我已经使用了一段时间的解决方法:
Environment.OSVersion.Version.Build >= 22000;
Windows 11 从内部版本号 22000 开始,Windows 10 Insider 内部版本大致结束于版本号 21390 https://learn.microsoft.com/en-us/windows-insider/active-dev-branch,因此据我所知,这只会检测 Windows 11 版本。
不过,请首先检查它是否是 Windows 系统,另一个操作系统可能具有更高的内部版本号。
由于这个答案仍然有效,让我们更多地讨论这个解决方案的优点和缺点:
- 检查功能可用性而不是任意划定“Windows 11”界限应该是您的第一个想法,但是检测特定操作系统版本在某些情况下也有一些优点。
- 正如评论中提到的,这也不会区分 Windows Server 并为 Windows Server 2019 返回 true。快速搜索如何检测返回的服务器操作系统这个答案 https://stackoverflow.com/a/3138781/8517948,我没有测试过,但乍一看似乎很合理。
- 我应该添加的评论中提出的另一点是下一版本 Windows 的内部版本号,在这种情况下显然会返回 true,因为它们会更高。如果您确实想准确检测 Windows 11 并且不希望 Windows 12(或之后的任何版本)不惜一切代价出现,那么这不是适合您的解决方案。
- 最后,Windows 10 内部版本号是否会达到 22000 或更高的问题被微软员工反驳(“至少目前是这样”)here https://learn.microsoft.com/en-us/answers/questions/586619/windows-11-build-ver-is-still-10022000194.html.
- 您可以找到每个 Windows 10 更新的当前版本号here https://support.microsoft.com/en-us/topic/windows-10-update-history-8127c2c6-6edf-4fdf-8b9f-0f7be1ef3562 or here https://learn.microsoft.com/en-us/windows/release-health/release-information对于每个 Windows 11 更新here https://support.microsoft.com/en-us/topic/windows-11-version-22h2-update-history-ec4229c3-9c5f-4e75-9d6d-9025ab70fcce or here https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)