使用 .NET Framework 或 Windows API 检测 Windows 11

2024-03-10

在 .NET Framework 中,获取可以使用的操作系统版本Environment.OSVersionMajor 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(使用前将#替换为@)

使用 .NET Framework 或 Windows API 检测 Windows 11 的相关文章

随机推荐

  • RealityKit – 以编程方式设置 Reality Composer 实体的文本

    在我的 iOS 应用程序中 我想使用新的 Reality Composer 来介绍 AR 的一部分 在我的项目中 我使用以下代码加载场景 let arView ARView init frame frame Configure the AR
  • 从 Java 将变量插入 SQL 查询

    如何将变量插入 SQL 查询 这就是我到目前为止所拥有的 public String getBugList int amount Connection con DatabaseConnection getConnection try Pre
  • CSV 到 JSON Ruby 脚本?

    有谁知道如何编写将 csv 文件转换为 json 文件的 Ruby 脚本 CSV 将采用以下格式 Canon Digital IXUS 70 Epic Epic 100 3x Yes lockable Yes lockable Yes Ca
  • Apple LLVM 9.0 错误组 - 无法读取配置文件。找不到这样的文件或目录

    我已经创建了分发证书和分发配置文件 在尝试构建应用程序时 它抛出以下错误 无法读取个人资料 Users nan Projects Projectname node modules react native React Optimizatio
  • ffmpeg:是否可以替换可变帧率视频中的帧?

    用于视频处理的机器学习算法通常适用于帧 图像 而不是视频 在我的工作中 我使用 ffmpeg 将特定场景转储为一系列 png 文件 以某种方式处理它们 去噪 去模糊 着色 注释 修复等 将结果输出到相同数量的 png 文件中 然后用新帧更新
  • pymssql Windows 身份验证

    pymssql模块用于支持windows身份验证 现在看来并非如此 尽管在某些地方它仍然表明它应该有效 我一直无法找到这个问题的明确答案 也找不到解决方案 最相关的链接 https groups google com forum topic
  • EF:有关跨数据库关系的数据库设计问题

    Summary 我目前正在制作一个 非常简单 多租户 Web 应用程序的原型 其中用户 存储在数据库中 1 可以注册到不同的租户 存储在数据库中per租户 相同的数据库模式 我认为这种架构适用于许多多租户解决方案 遗憾的是 我发现实体框架不
  • 使用 requestSpotInstances 的 TagSpecifications 使用 aws-sdk 的 UnexpectedParameter

    我正在尝试向我的 AWS Spot 请求添加标签 但它已经归还给我了 UnexpectedParameter Unexpected key TagSpecifications found in params LaunchSpecificat
  • Delphi 泛型类可以从其类参数派生吗?

    我一直在尝试定义一个通用的 可继承的 TSingleton 类 这是我正在进行的工作 TSingleton
  • 在 C# 中解析 JSON 数据

    我有一个 JSON 数据如下 id 367501354973 from name Bret Taylor id 220439 由 IDictionary String Object 的对象 结果 返回 在我的 C 代码中 我不确定你是如何解
  • Perl:命名参数验证最佳实践

    我在类方法调用中使用命名参数 想知道是否有最佳实践来确保不传递未知参数 这就是我正在做的 sub classmethod my self shift my args param1 gt default1 param2 gt default2
  • fft后如何在C上均衡

    首先感谢您花时间回答 我的问题是下一个 我尝试使用 fft 快速傅立叶变换 在 C 上构建均衡器 因为现在我能够在向量 音频样本 上正确应用 fft 对其进行归一化 然后应用逆 fft 因为这里一切都好 但是当我尝试修改 fft 的结果 以
  • 如何从组件内的单点捕获 vuejs 错误

    我有一个使用大量 axios 的组件then catch 在捕获中我总是抛出console error like axios get then catch error gt console error 还有其他一些地方我也抛出错误 我正在寻
  • LabelEncoder指定DataFrame中的类

    我正在将 LabelEncoder 应用于 pandas DataFrame df Feat1 Feat2 Feat3 Feat4 Feat5 A A A A E B B C C E C D C C E D A C D E 我将标签编码器应
  • 如何解析 Netlogo 中的字符串?

    Context 对于我的模型 我希望有一个输入 用户可以在其中输入一系列值 E g 我希望从上面显示的输入中得到一个由五个数字组成的列表 例如 0 5 0 2 0 0 2 0 5 这样我就可以使用他们输入的数字进行一些计算 问题 不幸的是
  • 设置 SQL_MODE="NO_AUTO_VALUE_ON_ZERO";给出一个错误

    我的 mysql 数据库有问题 我无法从我的朋友那里导入数据库 我需要一些帮助 SET SQL MODE NO AUTO VALUE ON ZERO SET time zone 00 00 ERROR 声明的开头出人意料 靠近位置 0 的
  • GUID 可以多短?

    我知道标准 GUID 它们可以变得更短吗 其背后的理论是什么 Greg Dean 的答案是正确的 但为了了解 GUID 是如何生成的以及为什么不应该缩短它 我强烈建议您阅读下面的文章 新旧事物 GUID 是全局唯一的 但 GUID 的子字符
  • 如何扩展从npm包导入的vue组件?

    如果您有通过 Node 安装的 vue 组件 node modules vendor somecomponent vue 有什么方法可以修改 扩展该组件的模板 方法吗 Update 尝试下面的示例后 我遇到了这个问题 我在用https gi
  • VB.NET:哪个 As 子句与带有 Option Strict On 的匿名类型一起使用?

    考虑始终声明的要求Option Strict On 我们总是需要用As关键词 匿名类型的类型是什么 例子 Dim product As New With Key Name paperclips Price 1 29 接下来会发生什么As 尝
  • 使用 .NET Framework 或 Windows API 检测 Windows 11

    在 NET Framework 中 获取可以使用的操作系统版本Environment OSVersion与Major and Minor告诉您 Windows 版本的值 即 6 1 Windows 7 10 0 Windows 10 尽管