记录.Net 8 发布增加 PublishTrimmed 裁剪选项,调用WMI 的ManagementObject 异常
最近在做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 异常的更多相关文章
- asp.net core项目发布网站时的选项
发布网站时的选项 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, ...
- 【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 ...
- 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...
- CXF发布webService服务以及客户端调用
这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...
- vbscript调用WMI一键式式发布网站
作为.net开发,在window环境下,不得不熟悉些脚本语言,来减轻些日常开发中所遇到的一些繁杂的事情,比如自动发布网站,自动发布网站等等. WMI windows管理程序接口,可用各种与语言调用,方 ...
- 请求通道在等待 00:00:58.9616639 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。
异常信息:请求通道在等待 00:00:58.9616639 以后答复时超时.增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值.分配给此操作的时间可能是更长超时的一部分. 开发背 ...
- 规范git commit提交记录和版本发布记录
在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来 ...
- 基于Jquery UI的autocompelet改写,自动补全控件,增加下拉选项,动态设置样式,点击显示所有选项,并兼容ie6+
Jquery UI的autocompelete改写 注意:实现功能,除了原版的自动补全内容外,增加一个点击显示所有选项,样式能动态设置. 加载数据的来源为后台数据库读取. 具体代码如下: 引用 从官方 ...
- [ExtJS5学习笔记]第二十二节 Extjs5中使用beforeLabelTpl配置给标签增加必填选项星号标志
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39395753 官方例子:http://docs.sencha.com/extjs/5. ...
- Instagram发布动态自动裁剪照片说明
发布Ins时,照片总是被截取一截,感觉很不爽...然后就仔细了解了Ins是如何限制图片大小的. 官方帮助说的很清楚,https://help.instagram.com/163182164042672 ...
随机推荐
- MySQL配置主从复制教程(MySQL8)
原理: 数据库在进行DDL和DML语句操作时,会被记录到binlog的日志文件里,而读取这里面的日志就可以知道数据库进行过哪些DDL和DML操作,这是主数据库的日志,从数据库经过相关配置可以实时获取到 ...
- 【Web】前端框架对微软老旧浏览器的支持
零.原因 最近要做一个项目,要能在学校机房运行的,也要在手机上运行.电脑和手机,一次性开发,那最好的就是响应式前端框架了.手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都 ...
- 【Win32】通过多线程自动关闭对话框的方法
零.需求 希望在Windows开机后自动弹出个对话框提示一下,过8秒后自动关闭 一.解决 1.建项目和源文件 在VC6.0中新建Win32项目 新建C++源文件 2.编写代码 基础结构 #includ ...
- TCP延迟调优之PSH参数与passt延迟问题修复
qemu中使用passt来作为虚拟机的网卡NAT实现,希望能够利用它IP地址与host一致的优点.这本来是没有啥问题的,但是不知道为什么它的TCP入口流量的延迟很严重. 好吧,反正以后总是要改pass ...
- FREERTOS指令测试的思考
采用freertos编程后,有必要增加指令测试的功能: 1.便于对于软件各个子模块或功能点进行测试. 2.便于对硬件各个功能点是否正常进行测试. 在裸机编程中,我们一般使用串口进行运行数据的打 ...
- 利用 APEX 打造 Oracle 23ai 智能开发平台
Oracle 23ai 有很多新功能,但用户痛点是不会用. 因此计划开发一个适合小白的图形化界面Oracle 23ai智能开发平台,过程中也能学习APEX的玩法. 本篇先拿Oracle数据库向量操作相 ...
- DIY记录之 USBasp
序 笔者在上网浏览时发现了这个项目[0].刚好另一个DIY会需要对Attiny85进行烧写,并且感觉自己做一个USBasp来干这个事比较有趣,于是就买材料打板子准备DIY一个USBasp.这篇随笔是用 ...
- python爬虫爬取B站视频字幕,简单的数据处理(pandas将字幕写入到CSV文件中)
上文,我们爬取到B站视频的字幕:https://www.cnblogs.com/becks/p/14540355.html 这篇,讲讲怎么把爬到的字幕写到CSV文件中,以便用于后面的分析 本文主要用到 ...
- mysql8的sql_mode不起作用
如果sql_mode似乎没有起作用,可能是由以下几个原因造成的: 配置文件位置不正确:确保my.ini文件位于MySQL服务器实际读取配置的位置.对于Windows系统,这通常是MySQL安装目录下的 ...
- 电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎
引言:推荐系统的商业价值与实现挑战 在电商领域,推荐系统承担着提升用户转化率和平台GMV的核心使命.根据麦肯锡研究,亚马逊35%的销售额来自推荐系统,Netflix用户75%的观看行为由推荐驱动.传统 ...