C#如何获取电脑硬件信息 C# ManagementObjectSearcher用法

2次阅读

c#中获取电脑硬件信息最常用方式是通过system.management命名空间的managementobjectsearcher类,基于wmi查询,需引用system.management.dll,用wql语句如”select * from win32_processor”查询cpu、内存、硬盘等硬件信息,并注意异常处理与属性空值判断。

C#如何获取电脑硬件信息 C# ManagementObjectSearcher用法

C# 中获取电脑硬件信息最常用的方式是通过 System.Management 命名空间中的 ManagementObjectSearcher 类,它基于 windows Management Instrumentation(WMI)查询系统信息。这种方式无需第三方库,兼容性好,适用于 Windows 平台。

基础用法:初始化并执行 WMI 查询

ManagementObjectSearcher 的核心是传入一个 WMI 查询语句(WQL),然后遍历返回的 ManagementObjectCollection 获取属性值。使用前需添加引用:System.Management.dll,并在代码顶部引入命名空间:

using System.Management;

典型结构如下:

  • 构造 ManagementObjectSearcher 实例,传入 WQL 查询字符串(如 "SELECT * FROM Win32_Processor"
  • 调用 Get() 方法获取结果集合
  • 遍历每个 ManagementObject,用 ["PropertyName"] 语法读取字段(如 mo["Name"]
  • 注意处理可能为 NULL 的属性,避免运行时异常

常用硬件类与查询示例

WMI 提供多个预定义类,对应不同硬件组件:

  • CPUWin32_Processor → 获取型号、核心数、线程数、主频等
    “SELECT Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed FROM Win32_Processor”
  • 内存Win32_PhysicalMemory → 获取单条内存容量、类型、速度
    “SELECT Capacity, Speed, Manufacturer, PartNumber FROM Win32_PhysicalMemory”
  • 硬盘Win32_DiskDrive → 获取型号、接口、总容量
    “SELECT Model, InterfaceType, Size FROM Win32_DiskDrive”
  • 主板Win32_BaseBoard → 获取制造商、型号、版本
    “SELECT Manufacturer, Product, Version FROM Win32_BaseBoard”
  • 显卡Win32_VideoController → 获取名称、显存(AdapterRAM)、驱动版本
    “SELECT Name, AdapterRAM, DriverVersion FROM Win32_VideoController”

注意事项与健壮性建议

WMI 查询在某些环境(如精简版系统、权限受限账户、远程桌面会话)下可能失败或返回空结果:

  • 务必用 try-catch 包裹查询逻辑,捕获 ManagementExceptionUnauthorizedAccessException
  • 属性值可能为 nullManagementBaseObject 类型(如嵌套对象),建议用 mo["PropName"]?.ToString() 或先判断 mo["PropName"] != null
  • 部分数值(如内存容量、硬盘大小)以字节返回,需手动转为 GB/MB(除以 1024L * 1024 * 1024
  • 若需高性能批量采集,避免频繁新建 ManagementObjectSearcher,可复用或考虑异步封装

替代方案简述

虽然 ManagementObjectSearcher 是主流选择,但也有其他方式:

  • Windows.Devices.Enumeration(UWP):仅限 UWP 应用,API 更现代但权限限制多
  • 第三方库如 OpenHardwareMonitorLib:支持传感器数据(温度、风扇转速),需额外引用和运行权限
  • P/Invoke 调用 Win32 API:如 GetSystemInfoGlobalMemoryStatusEx,轻量但覆盖范围有限

基本上就这些。WMI 方式够用、稳定、文档丰富,适合大多数桌面应用的硬件信息采集需求。

text=ZqhQzanResources