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

来源:这里教程网 时间:2026-02-21 17:42:23 作者:

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 提供多个预定义类,对应不同硬件组件:

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

替代方案简述

虽然

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

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

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

相关推荐