当前位置: 首页 > news >正文

C# 获取Windows系统版本注意事项

首先通过微软官方文档:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各个操作系统对应的版本号

 下面介绍3种获取版本号的方式及弊端

1. Environment.OSVersion.Version

            OperatingSystem os = Environment.OSVersion;// 判断操作系统版本if (os.Version.Major == 10 && os.Version.Build < 22000){textBlock.Text = "当前操作系统是 Windows 10";}else if (os.Version.Major == 10 && os.Version.Build >= 22000){textBlock.Text = "当前操作系统是 Windows 11";}else{textBlock.Text = $"当前操作系统既不是  Windows 10也不是 Windows 11";}

该方式适合.NET Framework,并且必须添加应用程序清单文件,并且需要把程序应用程序清单文件里面的supportedOS项取消注释(默认是注释的)

 2. System.Runtime.InteropServices.RuntimeInformation.OSDescription

            var osDescription = System.Runtime.InteropServices.RuntimeInformation.OSDescription;var osDescs = osDescription.Split(' ');foreach (var osDesc in osDescs){if (!osDesc.Contains(".")) continue;var versions = osDesc.Split('.');if (versions.Length < 2) continue;if (int.Parse(versions[0]) == 10 && int.Parse(versions[2]) < 22000){textBlock.Text = "当前操作系统是 Windows 10";}else if (int.Parse(versions[0]) == 10 && int.Parse(versions[2]) >= 22000){textBlock.Text = "当前操作系统是 Windows 11";}else{textBlock.Text = $"当前操作系统既不是  Windows 10也不是 Windows 11";}}

该方式适合.NET Core以上(.net framework 4.7以上)

3. 从注册表中获取版本信息

            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion")){string productName = key.GetValue("ProductName") as string;int majorVersion = (int)key.GetValue("CurrentMajorVersionNumber");var buildNumber = int.Parse(key.GetValue("CurrentBuildNumber").ToString());if (!string.IsNullOrEmpty(productName) && productName.ToLower().Contains("windows")){if (majorVersion > 10 || majorVersion == 10 && buildNumber >= 22000){textBlock.Text = "当前操作系统是 Windows 11";}else if (majorVersion == 10 && buildNumber < 22000){textBlock.Text = "当前操作系统是 Windows 10";}else{textBlock.Text = $"当前操作系统既不是  Windows 10也不是 Windows 11";}}}

该方式暂时没发现问题,但是需要使用版本号推断是Win11

4. 从WMI获取系统版本(推荐)

            foreach (var o in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get()){var obj = (ManagementObject)o;// Microsoft Windows 11 企业版var caption = obj.GetPropertyValue("Caption");// 10.0.22000var version = obj.GetPropertyValue("Version");break;}

该方式可以准确获取Windows版本描述和版本号

http://www.lryc.cn/news/147370.html

相关文章:

  • STM32设计的宠物投喂器(正点原子mini开发板+2.8寸屏)
  • Python编程——深入了解不可变的元组
  • JVM——类加载与字节码技术—类加载器+运行期优化
  • [linux实战] 华为云耀云服务器L实例 Java、node环境配置
  • python面试:使用cProfile剖析程序性能
  • leetcode-188-买卖股票的最佳时机 IV
  • Grounded Language-Image Pre-training论文笔记
  • 成集云 | 钉钉财务费用单同步至畅捷通 | 解决方案
  • Redis——》死锁
  • URL重定向漏洞
  • JavaScript(函数,作用域和闭包)
  • C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密
  • 【docker-compose】【nginx】动态配置
  • ExpressLRS开源之接收机固件编译烧录步骤
  • 提取视频文件里的音频和无声视频
  • SpringBoot原理
  • MySQL事务原理、MVCC详解
  • 在Windows操作系统上安装Neo4j数据库
  • 国民八路参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑工业出版社,2022.
  • 24 Linux高级篇-备份与恢复
  • 微信小程序的图书馆预约系统设计与实现
  • 《2023年网信人才培训-网络安全从业人员能力素养提升培训》第一期成功举办
  • WebGpu VS WebGL
  • HTML <tfoot> 标签
  • VScode的PHP远程调试模式Xdebug
  • HTML5-2-链接
  • Java--常用jar命令
  • 微服务中间件--多级缓存
  • clickhouse系列3:clickhouse分析英国房产价格数据
  • 2023京东口腔护理赛道行业数据分析(京东销售数据分析)