Hardware.Info本地开发运行没问题,放到服务器上抛异常
利用Hardware.info获取设备硬件信息:
C# 全选
var hardwareInfo = new HardwareInfo();
hardwareInfo.RefreshAll(); // 刷新所有设备信息
MachineInfo info = new MachineInfo()
{
// CPU信息
CpuList = hardwareInfo.CpuList.Select(s => new MachineInfo.CPUInfo()
{
Name = s.Name,
NumberOfCores = s.NumberOfCores,
NumberOfLogicalProcessors = s.NumberOfLogicalProcessors
}).ToList(),
// 内存信息
Memory = new MachineInfo.MemoryInfo()
{
TotalPhysical = hardwareInfo.MemoryStatus.TotalPhysical,
MemoryList = hardwareInfo.MemoryList.Select(s => new MachineInfo.MemoryItem()
{
Capacity = s.Capacity,
FormFactor = s.FormFactor.ToString(),
Manufacturer = s.Manufacturer,
PartNumber = s.PartNumber,
SerialNumber = s.SerialNumber,
Speed = s.Speed
}).ToList()
},
// 主板信息
MotherboardList = hardwareInfo.MotherboardList.Select(s => new MachineInfo.MotherboardInfo()
{
Manufacturer = s.Manufacturer,
Product = s.Product,
SerialNumber = s.SerialNumber
}).ToList(),
// 网卡信息
NetworkAdapterList = hardwareInfo.NetworkAdapterList.Select(s => new MachineInfo.NetworkInfo()
{
ProductName = s.ProductName,
MACAddress = s.MACAddress
}).ToList(),
// 系统信息
OperatingSystem = new MachineInfo.OSInfo()
{
Name = hardwareInfo.OperatingSystem.Name,
VersionString = hardwareInfo.OperatingSystem.VersionString
}
};
本地运行没问题,但是在服务器上运行,就会抛异常,抓取异常信息如下:
Exception:【异常类型】:ManagementException
【异常信息】:无效查询
【堆栈调用】: at System.Management.ManagementException.ThrowWithExtendedInfo(Managem
entStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.Mo
veNext()
at Hardware.Info.Windows.HardwareInfoRetrieval.GetMonitorList()
at Hardware.Info.HardwareInfo.RefreshMonitorList()
at Hardware.Info.HardwareInfo.RefreshAll()
at JOCAPI.Core.Lic.MachineCode.GetMachineCodeString()
at JOCAPI.Core.Extensions.Extention.GA7k6XjmWOgrNvQ7HFN()
at JOCAPI.Core.Extensions.Extention.ValidateLic(IConfiguration configuration)
【异常方法】:Void ThrowWithExtendedInfo(System.Management.ManagementStatus)
原因分析
猜测是服务器通过远程桌面管理的,并没有连接显示器。所以在调用HardwareInfo
的RefreshMonitorList
方法时候发生异常了
解决方案
慎用HardwareInfo的RefreshAll
方法
改为只刷新自己需要获取设备信息的方法
代码修改为:程序正常运行
C# 全选
var hardwareInfo = new HardwareInfo();
//hardwareInfo.RefreshAll(); // 必须要这一行代码,不然不会更新,服务器没有显示器,会抛异常
hardwareInfo.RefreshCPUList(); // CPU
hardwareInfo.RefreshMemoryStatus(); // 内存状态
hardwareInfo.RefreshMemoryList(); // 内存列表
hardwareInfo.RefreshMotherboardList(); // 主板
hardwareInfo.RefreshNetworkAdapterList(); // 网卡
hardwareInfo.RefreshOperatingSystem(); // 系统
hardwareInfo.RefreshDriveList(); // 硬盘
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生