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

.NET 8 获取CPU序列号和主板序列号异常问题

一般情况下我们会使用:

获取磁盘序列号:

      try  
      {  
             System.Management.ManagementObjectSearcher   cmicWmi   =   new   ManagementObjectSearcher("SELECT   *   FROM   Win32_DiskDrive");  
             System.UInt32   tmpUint32   =   0;  
             foreach(ManagementObject   cmicWmiObj   in   cmicWmi.Get())  
             {  
                      tmpUint32   =   Convert.ToUInt32(cmicWmiObj["signature"].ToString());  
             }  
             this.textBox1.Text   =   tmpUint32.ToString();  
             this.gProgressBar1.Value   ++;  
       }  
      catch(Exception   ex1)  
      {  
             throw   new   Exception(ex1.ToString());  
      }

      获取CPU序列号:

     try  
     {  
            System.Management.ManagementObjectSearcher   Wmi   =   new   ManagementObjectSearcher("SELECT   *   FROM   Win32_Processor");  
            string   tmpUint32_1   =   string.Empty;  
            foreach(ManagementObject   WmiObj   in   Wmi.Get())  
            {  
                   tmpUint32_1   =WmiObj["ProcessorId"].ToString();  
            }  
            this.textBox2.Text   =   tmpUint32_1;  
            this.gProgressBar1.Value   ++;  
      }  
      catch(Exception   ex2)  
      {  
             throw   new   Exception(ex2.ToString());  
      }

如上图代码,可能会在 winserver 2016   2019  2012r2  某些系统上报错,其错误信息为:

System.TypeInitializationException: The type initializer for 'System.Management.ManagementPath' threw an exception. ---> System.PlatformNotSupportedException: The native library 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\wminet_utils.dll' does not have all required functions. Please, update the .NET Framework.

因为在windows 平台上使用这段代码,其实是依赖了.NET FrameWork 相关的,为防止错误异常情况,微软有新的库对访问硬件信息的支持,

可在nuget 使用   Microsoft.Management.Infrastructure 

其通过.NET8获取cpu序列号和主板序列号代码如下:

#region 获取处理器序列号
public static string cpuinfo()
{
    // 查询 WMI 类
    string namespaceName = @"root\cimv2";
    string query = "SELECT * FROM Win32_BaseBoard";

    CimSession session = CimSession.Create(null);
    IEnumerable<CimInstance> result = session.QueryInstances(namespaceName, "WQL", query);
    string boardSerialNumber = string.Empty;

    foreach (CimInstance instance in result)
    {
        boardSerialNumber = instance.CimInstanceProperties["SerialNumber"].Value.ToString();
    }
    return boardSerialNumber;
}
#endregion

#region 获取主板序列号
public static string biosinfo()
{

    string namespaceName = @"root\cimv2";
    string query = "SELECT * FROM Win32_Processor";

    CimSession session = CimSession.Create(null);
    IEnumerable<CimInstance> result = session.QueryInstances(namespaceName, "WQL", query);
    string BiosSerialNumber = string.Empty;
    foreach(CimInstance instance in result)
    {
        BiosSerialNumber = instance.CimInstanceProperties["ProcessorId"].Value.ToString();

    }
    return BiosSerialNumber;
}
#endregion

上块代码经过实测和 .NET framework 获取的序列号是一致的。


http://www.kler.cn/a/447071.html

相关文章:

  • @PostConstruct注解解释!!!!
  • 项目管理工具Maven(一)
  • mybatis分页插件的使用
  • [创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论
  • 一.photoshop导入到spine
  • 感知机与逻辑回归的异同点
  • 2110 加分二叉树
  • 重拾设计模式--组合模式
  • Redis存在安全漏洞
  • MyBatis 的优缺点
  • 【中标麒麟服务器操作系统实例分享】java应用DNS解析异常分析及处理
  • 前端yarn工具打包时网络连接问题排查与解决
  • Hadoop实现WordCount详解
  • HTTP请求的奇幻旅程:从发起至响应的全方位探索
  • 算法 计算大的长方形容器中,存放一排小长形容器,计算出小长形容器中最后一个元素的x坐标的位置的实现方法
  • linux-----进程execl簇函数
  • mysql的事务和存储引擎+备份
  • Audiocraft智能音频和音乐生成工具部署及使用
  • C# OpenCV机器视觉:图像平滑
  • STM32HAL I2C函数
  • STM32裸机系统采用滴答定时器延时
  • Ubuntu安装及删除httpd(Apache)
  • 初识面向对象晨考day09
  • ISP算法之黑电平BLC校正
  • 重拾设计模式--备忘录模式
  • 半连接转内连接 | OceanBase SQL 查询改写