最近在做OTA的功能,需要获取到sn做一些业务的逻辑。我们自己实现的库里边的,大部分都是调用 System.Management 的 ManagementObjectSearcher 获取 Bios 的序列号

如下所示:

 private void BtnWmi_OnClick(object sender, RoutedEventArgs e)
{
try
{
// 创建 WMI 查询
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
"SELECT SerialNumber FROM Win32_BIOS"); // 遍历查询结果
foreach (ManagementObject obj in searcher.Get())
{
string serialNumber = obj["SerialNumber"]?.ToString(); if (!string.IsNullOrEmpty(serialNumber))
{
Console.WriteLine($"BIOS 序列号: {serialNumber}");
return;
}
} Console.WriteLine("未找到 BIOS 序列号信息");
}
catch (ManagementException ex)
{
Console.WriteLine($"WMI 查询错误: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"WMI 查询异常错误: {ex.Message}");
} }

由于我们项目现在新建的项目都是基于.Net 8 开发,而且为了兼容多种设备和系统,我们目前的打包方式都是以发布独立部署的方式

同时为了能减少输出文件的大小,我们会启用裁剪的方式   <PublishTrimmed>true</PublishTrimmed>

  <PublishTrimmed>true</PublishTrimmed>
<_SuppressWpfTrimError>true</_SuppressWpfTrimError>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<TrimMode>partial</TrimMode>

以上准备工作做好,发布以上的程序,运行发现如下的错误:

查询了官网的资料,有如下的说明:剪裁选项 - .NET | Microsoft Learn

就是启用裁剪会禁用掉某些框架的功能。

解决方法:

参考:使用 C# 远程连接到 WMI - Win32 apps | Microsoft Learn

使用 Microsoft.Management.Infrastructure 的 CimSession 替换WMI 早期的版本

如下所示:

 using Microsoft.Management.Infrastructure;

private void BtnCim_OnClick(object sender, RoutedEventArgs e)
{
try
{
// 创建本地CIM会话
using (var session = CimSession.Create(null))
{
// 查询Win32_BIOS类
var instances = session.QueryInstances(@"root\cimv2", "WQL", "SELECT SerialNumber FROM Win32_BIOS");
foreach (var instance in instances)
{
var serialNumber = instance.CimInstanceProperties["SerialNumber"].Value?.ToString();
Console.WriteLine($"BIOS 序列号: {serialNumber}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"错误: {ex.Message}");
} }

不修改发布选项的情况下,运行如下:是可以获取得到Bios的sn的

总结:

1、推荐使用 Microsoft.Management.Infrastructure 的 CimSession 替换 WMI 旧版的 ManagementObject

2、裁剪的选项 PublishTrimmed 如果不介意应用程序的一点体积,是可以忽略不加

参考:

1、剪裁选项 - .NET | Microsoft Learn

2、为应用程序部署创建单个文件 - .NET | Microsoft Learn

3、使用 C# 远程连接到 WMI - Win32 apps | Microsoft Learn

记录.Net 8 发布增加 PublishTrimmed 裁剪选项,调用WMI 的ManagementObject 异常的更多相关文章

  1. asp.net core项目发布网站时的选项

    发布网站时的选项 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, ...

  2. 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘

    [C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...

  3. 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!

    在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...

  4. CXF发布webService服务以及客户端调用

    这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...

  5. vbscript调用WMI一键式式发布网站

    作为.net开发,在window环境下,不得不熟悉些脚本语言,来减轻些日常开发中所遇到的一些繁杂的事情,比如自动发布网站,自动发布网站等等. WMI windows管理程序接口,可用各种与语言调用,方 ...

  6. 请求通道在等待 00:00:58.9616639 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。

    异常信息:请求通道在等待 00:00:58.9616639 以后答复时超时.增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值.分配给此操作的时间可能是更长超时的一部分. 开发背 ...

  7. 规范git commit提交记录和版本发布记录

    在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来 ...

  8. 基于Jquery UI的autocompelet改写,自动补全控件,增加下拉选项,动态设置样式,点击显示所有选项,并兼容ie6+

    Jquery UI的autocompelete改写 注意:实现功能,除了原版的自动补全内容外,增加一个点击显示所有选项,样式能动态设置. 加载数据的来源为后台数据库读取. 具体代码如下: 引用 从官方 ...

  9. [ExtJS5学习笔记]第二十二节 Extjs5中使用beforeLabelTpl配置给标签增加必填选项星号标志

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39395753 官方例子:http://docs.sencha.com/extjs/5. ...

  10. Instagram发布动态自动裁剪照片说明

    发布Ins时,照片总是被截取一截,感觉很不爽...然后就仔细了解了Ins是如何限制图片大小的. 官方帮助说的很清楚,https://help.instagram.com/163182164042672 ...

随机推荐

  1. MySQL配置主从复制教程(MySQL8)

    原理: 数据库在进行DDL和DML语句操作时,会被记录到binlog的日志文件里,而读取这里面的日志就可以知道数据库进行过哪些DDL和DML操作,这是主数据库的日志,从数据库经过相关配置可以实时获取到 ...

  2. 【Web】前端框架对微软老旧浏览器的支持

    零.原因 最近要做一个项目,要能在学校机房运行的,也要在手机上运行.电脑和手机,一次性开发,那最好的就是响应式前端框架了.手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都 ...

  3. 【Win32】通过多线程自动关闭对话框的方法

    零.需求 希望在Windows开机后自动弹出个对话框提示一下,过8秒后自动关闭 一.解决 1.建项目和源文件 在VC6.0中新建Win32项目 新建C++源文件 2.编写代码 基础结构 #includ ...

  4. TCP延迟调优之PSH参数与passt延迟问题修复

    qemu中使用passt来作为虚拟机的网卡NAT实现,希望能够利用它IP地址与host一致的优点.这本来是没有啥问题的,但是不知道为什么它的TCP入口流量的延迟很严重. 好吧,反正以后总是要改pass ...

  5. FREERTOS指令测试的思考

    采用freertos编程后,有必要增加指令测试的功能:   1.便于对于软件各个子模块或功能点进行测试.   2.便于对硬件各个功能点是否正常进行测试. 在裸机编程中,我们一般使用串口进行运行数据的打 ...

  6. 利用 APEX 打造 Oracle 23ai 智能开发平台

    Oracle 23ai 有很多新功能,但用户痛点是不会用. 因此计划开发一个适合小白的图形化界面Oracle 23ai智能开发平台,过程中也能学习APEX的玩法. 本篇先拿Oracle数据库向量操作相 ...

  7. DIY记录之 USBasp

    序 笔者在上网浏览时发现了这个项目[0].刚好另一个DIY会需要对Attiny85进行烧写,并且感觉自己做一个USBasp来干这个事比较有趣,于是就买材料打板子准备DIY一个USBasp.这篇随笔是用 ...

  8. python爬虫爬取B站视频字幕,简单的数据处理(pandas将字幕写入到CSV文件中)

    上文,我们爬取到B站视频的字幕:https://www.cnblogs.com/becks/p/14540355.html 这篇,讲讲怎么把爬到的字幕写到CSV文件中,以便用于后面的分析 本文主要用到 ...

  9. mysql8的sql_mode不起作用

    如果sql_mode似乎没有起作用,可能是由以下几个原因造成的: 配置文件位置不正确:确保my.ini文件位于MySQL服务器实际读取配置的位置.对于Windows系统,这通常是MySQL安装目录下的 ...

  10. 电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎

    引言:推荐系统的商业价值与实现挑战 在电商领域,推荐系统承担着提升用户转化率和平台GMV的核心使命.根据麦肯锡研究,亚马逊35%的销售额来自推荐系统,Netflix用户75%的观看行为由推荐驱动.传统 ...