桌面应用如何判断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
相关文章
- 3分钟短文:Laravel应用跟用户打交道,就从拿到他们的数据开始!
- 统信UOS操作系统应用生态受限,怎么破?
- 区块链原理说明及其应用场景
- AI网关结合智慧路灯杆可以开发什么应用
- kubernetes如何解决应用升级导致的流量中断问题
- MySQL与PHP的基础与应用专题之表连接
- 探索 Linux 操作系统的灵活应用(linux的应用程序)
- Linux在搭建AD域上的应用(linuxad域)
- Linux下fcntl系统调用的应用(fcntllinux)
- Linux操作系统下的Sox应用(soxlinux)
- 和应用Linux操作系统:从分支到应用(linux的分支)
- Linux操作系统原理及其应用(操作系统原理linux)
- 灰度发布在 UCloud 大规模虚拟网络中的应用
- ATM 系统与 Linux 操作系统的融合应用(atmlinux)
- Redis在操作系统中的应用(redisos)
- Linux文件操作系统:应用与实现(linuxfops)
- 多云融合和安全集成推动 SD-WAN 的大规模应用
- 开源Cheops软件在企业中的应用
- 探讨Linux操作系统中网段ip的应用及配置技巧(linux网段ip)
- Linux操作系统应用DPI技术进行效能调优(linuxdpi)
- 掌握Oracle关联实例语句,实现数据库应用自如(oracle关实例语句)
- Oracle中截取字段的应用技巧(oracle中截取字段%)
- AndroidMap新用法:MapFragment应用介绍
- 解析四方定理的应用