首页 > 系统相关 >C# 获取Windows系统版本注意事项

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

时间:2023-08-29 14:33:43浏览次数:35  
标签:10 操作系统 textBlock C# Text 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";
                    }
                }
            }

该方式暂时没发现问题

标签:10,操作系统,textBlock,C#,Text,Windows,&&,注意事项
From: https://www.cnblogs.com/log9527blog/p/17664672.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题
    四、用go语言,假设现有一个包含n个元素的待排序序列。该序列由n/k个子序列组成,每个子序列包含k个元素。一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素。因此,对于这个长度为n的序列的排序转化为对n/k个序列中的k个元素的排序。试证......
  • 搭建自己的ChatGPT智能问答,HelpLook ChatBot 正式上线!
    基于已有内容的站点或现成文档零代码快速导入即可生成自己专属的ChatGPT智能问答机器人HelpLookChatBot,正式发布上线!只需连接您的数据源,HelpLook就能为您的数据创建一个类似ChatGPT的聊天机器人。您可以将它作为小工具以JS的方式添加到您的任意网站,或API集成的方式,与您专属......
  • Navicat 最新版下载_永久激活注册(附图文安装教程)
    分享一波Navicat15的最新激活版安装包和注册机,可以永久激活哟,笔者亲测有效,小伙伴们可放心下载,下面附上详细的图文安装教程。无图无真相,奉上Navicat15激活成功的画面:前言Navicat是一款强大的数据库管理和设计工具,支持Win、macOS和linux。直观的GUI让用户简单地管理MySQ......
  • 当某个excel工作簿的某个单元格的值发生变动时, 自动执行python某脚本, 如何实现?
    要实现当Excel工作簿中的某个单元格值发生变化时自动执行Python脚本,你可以考虑以下步骤:监视单元格变化:首先,你需要实现监视Excel工作簿中的特定单元格是否发生了变化。这可以通过使用VBA(VisualBasicforApplications)宏来实现。打开Excel工作簿,按下ALT+F11打开VBA编辑器,然后......
  • RISCV-MINI cache小记
    该cache映射策略为直接映射,采用写回(writeback)方式。需要注意的细节在于cpu-cache通过mask信号判断访存是读还是写,显然mask全0时为读。下图FSM中省略了dirty会影响状态转移,比如WriteCache到WriteBack,当cache块为dirty时才会触发aw.fire(io.nasti.aw.valid:=is_dirty)。简单解释:......
  • 直播平台搭建,RecyclerView实现item图片放大缩小
    直播平台搭建,RecyclerView实现item图片放大缩小((ShopDetailsViewHolder)holder).img_list.setOnClickListener(newView.OnClickListener(){  @RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)  @Override  publicvoidonClick(Viewv){    Intentin......
  • 直播带货源码,RecyclerView横向导航条目出现
    直播带货源码,RecyclerView横向导航条目出现/** *RecyclerView移动到当前位置, * *@parammanager  设置RecyclerView对应的manager *@parammRecyclerView 当前的RecyclerView *@paramn 要跳转的位置 */publicstaticvoidMoveToPosition(LinearLayoutManager......
  • 【lc】459. 重复的子字符串
    链接:https://leetcode.cn/problems/repeated-substring-pattern/description/思路:这题其实挺有意思的,我一开始寻思按照字符读到一个dict里统计各个字符的个数,讲道理每个字符的个数是相同的才对。(我承认我傻了,忽略了aab这种情况)然后我就开始想,如果能行,那原串肯定是子串的n倍。......
  • 融云 CallPlus SDK 上线!1V1 音视频、远程服务类应用的实现利器
    近期,融云新一代音视频通话场景化SDKCallPlus将正式上线!关注【融云全球互联网通信云】了解更多融云CallPlus完整封装了拨打、振铃、接听、挂断等整套呼叫流程,支持一对一及群组多人音视频通话。在功能上,融云CallPlus以独立后端保障状态统一性和业务扩展性,上新了视频预览,美颜设......
  • Greenplum 数据库启用pgbouncer
    pgbouncer是PostgreSQL的轻量的连接池,可以有效降低连接数,提升系统性能。Greenplum当前版本已经自带,只是多数组织在实践中似乎并未启用此服务,也算是一种资源的浪费了。gpbouncer有三种连接方式:Sessionpooling/会话连接池最普通的方式,在客户端连接的时候,在它的连接生命期内,会给......