记录.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 ...
随机推荐
- JOKER 前端框架:自带云端可视化 IDE 的创新利器
一.框架概述 在当今前端开发的多元化领域中,JOKER 前端框架犹如一颗璀璨的明星,以其独特而强大的功能,为开发者开辟了一条高效.便捷的创新之路. JOKER 不仅仅是一个普通的框架,它更是一个综合性 ...
- Linux升级openssl、openssh
在项目中,我们经常会发现Linux系统中Open SSH.Open SSL存在高危漏洞,如OpenSSL"心脏出血"漏洞,利用该漏洞,黑客可以获取约30%的https开头网址的 ...
- SSH远程神器—Termius
简介 Termius是一款非常好用而且漂亮的SSH客户端,能快速远程控制服务器,可以定制自己喜欢的主题.Termius不仅涵盖了PC端的Windows.Linux.Mac,还支持手机端的Android ...
- 【Docker】命令行操作
Docker常用命令 帮助命令 docker version docker info docker --help Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker ...
- 【SpringMVC】视图和视图解析器
视图和视图解析器 Spring MVC如何解析视图 视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类 ...
- nrm
nrm npm install -g nrm nrm ls nrm use taobao Tips:不要使用cnpm,会有些奇怪的问题,导致npm install失败. 参考
- 《机器人SLAM导航核心技术与实战》先导课:如何安装Ubuntu系统
<机器人SLAM导航核心技术与实战>先导课:如何安装Ubuntu系统 视频讲解 [先导课]2.如何安装Ubuntu系统-视频讲解 [先导课]2.1.如何安装Ubuntu系统-操作系统概念- ...
- Python 潮流周刊#96:MCP 到底是什么?(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 从DeepSeek看算法备案&大模型备案
一.deepseek的备案情况 (一)算法备案情况 在算法备案系统网站上,北京深度求索人工智能基础技术研究有限公司和杭州深度求索人工智能基础技术研究有限公司分别进行了两个算法备案.从公司名称来看,正如 ...
- Spring Bean的声明方式
一.环境说明 项目结构 StudentService package com.cookie.service; /** * @author cxq * @version 1.0 * @date 2020 ...