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

背景

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

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

在某些情况下因为不同的系统存在一些表现上的差别,我们需要区分操作系统的版本在编码时进行不同的处理,所以正确的获取操作系统版本非常重要,特别是 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操作系统
Win11