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.22000
                var version = obj.GetPropertyValue("Version");
                break;
            }

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值