首页 > 其他分享 >如何正确获取系统版本号

如何正确获取系统版本号

时间:2024-12-01 09:03:27浏览次数:7  
标签:src 正确 版本号 获取 int 0xFF ref public

细心的同学会发现,我们通过内置函数Environment.OSVersion获取到的系统版本号会存在不同的系统版本,版本号是一样的情况。代替的方案可以通过windows api 来获取内置版本号。

实现方法比较简单,就不做描述,以下是完整可用的代码。

public class Win32
    {
        [DllImport("ntdll.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr RtlGetNtVersionNumbers(ref int dwMajor, ref int dwMinor, ref int dwBuildNumber);
    }

    public class EnvironmentEx
    {
        /// <summary>
        /// 获取系统版本号
        /// </summary>
        public static string OSVersion
        {
            get
            {
                try
                {
                    int dwMajor = 0, dwMinor = 0, dwBuildNumber = 0, buildNum = 0;

                    Win32.RtlGetNtVersionNumbers(ref dwMajor, ref dwMinor, ref dwBuildNumber);

                    if (dwBuildNumber != 0)
                    {
                        var bytes = ByteConvert.IntToBytes(dwBuildNumber);

                        buildNum = ByteConvert.BytesToInt(new byte[] { bytes[0], bytes[1], 0, 0 }, 0);
                    }

                    return $"{dwMajor}.{dwMinor}.{buildNum}";
                }
                catch (Exception)
                {
                    return Environment.OSVersion.ToString();
                }
            }
        }
    }

    public class ByteConvert
    {
        public static int BytesToInt(byte[] src, int offset)
        {
            if (src == null) return 0;
            int value;
            value = (src[offset] & 0xFF)
                    | ((src[offset + 1] & 0xFF) << 8)
                    | ((src[offset + 2] & 0xFF) << 16)
                    | ((src[offset + 3] & 0xFF) << 24);
            return value;
        }

        public static byte[] IntToBytes(int value)
        {
            byte[] src = new byte[4];
            src[3] = (byte)((value >> 24) & 0xFF);
            src[2] = (byte)((value >> 16) & 0xFF);
            src[1] = (byte)((value >> 8) & 0xFF);//高8位
            src[0] = (byte)(value & 0xFF);//低位
            return src;
        }
    }

标签:src,正确,版本号,获取,int,0xFF,ref,public
From: https://blog.csdn.net/qq_22933729/article/details/144164865

相关文章

  • 使用js获取鼠标坐标
    //获取鼠标坐标有两种主要方式,取决于你想获取相对于什么位置的坐标://1.相对于视口(viewport)的坐标:document.addEventListener('mousemove',function(event){constx=event.clientX;consty=event.clientY;//使用x和y坐标,例如显示在页面上consol......
  • uni-app vue3 获取 package.json 自定义环境变量
    一、初始化项目 二、添加 package.json 文件(必须)注意:文件里面不要写备注{ "uni-app":{ "scripts":{ "dev":{ "title":"开发版", "env":{ "ENV_TYPE":"dev", "UNI_PLATFORM&q......
  • jvm-46-jvm Thread Dump 线程的信息获取+可视分析化工具 FastThread
    拓展阅读JVMFULLGC生产问题I-多线程通用实现JVMFULLGC生产问题II-如何定位内存泄露?线程通用实现JVMFULLGC生产问题III-多线程执行队列的封装实现,进一步抽象jvm-44-jvm内存性能分析工具EclipseMemoryAnalyzerTool(MAT)/内存分析器(MAT)jvm-45-jvmdump......
  • Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接
    Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器替代已下线的主服务器......
  • 安装苹果系统台式电脑如何正确选购装机硬件
    结合自己的一些装机经验和网上查阅的相关资料,给大家安利一波“如何正确选配黑苹果硬件”方面的相关知识。文中配置推介表中的配置都是目前在安装黑苹果上比较常见且稳定的机型,并且EFI引导文件都有现成的,在各大资源网站中也比较好找,能帮助你快速简单的吃上黑苹果。如果你想安......
  • 【泛微E9】获取移动页面的参数,并赋值给表单浏览框。
    表单代码块如下:<script>varkpbm=getUrlParam("kpbm");//获取URL中的kpbm参数varzcbm=getUrlParam("zcbm");//获取URL中的zcbm参数varsjid=getUrlParam("id");console.log(kpbm);console.log(zcbm);console.log(sjid);WfForm.ch......
  • 在pinia中使用SecureLS将数据加密后存储到localStorage中,获取的时候解密使用
    第一步对secure-ls进行安装:npminstallsecure-ls第二步:secure-ls的引入:importSecureLSfrom"secure-ls";点击查看代码import{ref}from"vue";import{defineStore}from"pinia";importtype{StorageLike}from"pinia-plugin-pers......
  • uni-app plus.runtime.arguments 值清空后再次获取值一直为空处理方法
    1.近期遇见一个uni-app的问题plus.runtime.arguments的值只在未清除前能取到,一旦清除后plus.runtime.arguments=null;plus.runtime.arguments="";就无法再获取到,不伦是onShow,还是onLaunch,都无法获取到,即第一次可以或者是如果不清除,又在onShow里获取了就会一直执行获......
  • 利用Java爬虫获取1688“同行还在看”信息的详细指南
    在电商竞争激烈的市场中,了解同行的动态和行为对于商家来说至关重要。阿里巴巴中国站(1688)作为一个庞大的B2B平台,提供了丰富的商品和商家信息。通过获取“同行还在看”的数据,商家可以洞察行业趋势,优化自己的产品线和营销策略。本文将详细介绍如何使用Java编写爬虫程序,以合法合规......
  • 如何利用Java爬虫获取1688同行还在看(代码示例)
    在电商领域,了解同行的动态对于商家来说至关重要。阿里巴巴中国站(1688)作为一个庞大的B2B平台,提供了丰富的商品和商家信息。通过获取“同行还在看”的数据,商家可以洞察行业趋势,优化自己的产品线和营销策略。本文将详细介绍如何使用Java编写爬虫程序,以合法合规的方式获取1688上的......