桌面应用如何判断win11操作系统

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桌面应用如何判断win11操作系统相关的知识,希望对你有一定的参考价值。

背景

Windows 11 操作系统已经正式发布快有一年了,在 .Net 开发中,我们获取操作系统版本,经常使用 Environment.OSVersion.Version.Major 和 Minor(6.1 = Windows 7, 10.0 = Windows 10),但是当 Win11 出现以后,一切变的有些不一样了。因为 Win11 获取到的操作系统版本[1] Major Minor 与 Win10 一样。

操作系统版本

在某些情况下因为不同的系统存在一些表现上的差别,我们需要区分操作系统的版本在编码时进行不同的处理,所以正确的获取操作系统版本非常重要,特别是 Win10 和 Win11 的变化还挺大的。

方案

其实剑走偏锋,我们可以通过检测某些软件(win11做了某些系统软件的删减和增加)以及某些系统软件的版本号来实现,但毕竟是偏门左道。

不过,经过多方查找和测试,我在 Stackoverflow[2] 找到一个相对来说靠谱的做法,Windows 10 从内部版本 10240 开始,以内部版本 19044 结束。Windows 11 从内部版本 22000 开始,那么:

Environment.OSVersion.Version.Build >= 22000;

通上面的代码,在我们确定 Windows 操作系统之后就可以通过上面的代码轻松判断操作系统是否是 Win11 了。

后记

最后讲一下寻找解决方案过程中忍不住吐槽的地方,你敢信我在测试一个通过注册表读取操作系统版本的方案最后 Win11 获得结果产品名竟然是 Windows 10 Pro ?

而且这个操作系统是我前几天才使用 Win11 的官方镜像新装的,还是从 Win11 的开发者预览版新装的稳定版。

string HKLMWinNTCurrent = @"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
string osName = Registry.GetValue(HKLMWinNTCurrent, "productName", "").ToString();
Win11

References

[1] 操作系统版本: https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version
[2] Stackoverflow: https://stackoverflow.com/questions/69038560/detect-windows-11-with-net-framework-or-windows-api

以上是关于桌面应用如何判断win11操作系统的主要内容,如果未能解决你的问题,请参考以下文章

Win10系统如何在防火墙里开放端口

win11安装ubuntu子系统与桌面 填坑记录

新装Ubuntu20.04和win10双系统,有线网络DHCP方式,win10下可以连网。ubuntu下无法连网?

新装的WIN7系统,网络连接显示的是未识别的网络,数据包发送有数字,接收是0,请问如何解决....

win10系统怎么把软件图标放到桌面上

win10新装系统,显卡风扇转动,链接正常开机,但设备管理器如果显示,无法更新驱动