WMI查询硬件信息需先确保管理员权限和COM初始化,否则抛异常;CPU用Win32_Processor(遍历累加核心数),内存用Win32_PhysicalMemory(精确容量),硬盘型号用Win32_DiskDrive,温度需OpenHardwareMonitor等扩展,显卡需区分核显/独显并校验状态。

WMI 查询硬件信息前必须确认权限和 COM 初始化
没管理员权限或没初始化 COM,ManagementObjectSearcher 一查就抛 UnauthorizedAccessException 或 COMException。Windows 10/11 默认禁用部分 WMI 类的远程访问,本地运行也得走完整流程。
- 控制台程序需右键“以管理员身份运行”,WinForms/WPF 应用需在
app.manifest中设requestedExecutionLevel level="requireAdministrator" - 首次使用 WMI 前调用
CoInitializeEx(IntPtr.Zero, COINIT_APARTMENTTHREADED)(C# 中常用[STAThread]标记Main方法即可) - 若目标机器禁用了 WMI 服务(
winmgmt),先运行net start winmgmt,否则所有查询都返回空集合
CPU 和内存信息用 Win32_Processor / Win32_PhysicalMemory 最稳
Win32_Processor 能拿到核心数、逻辑处理器数、最大频率、名称;Win32_PhysicalMemory 提供单条内存容量、速度、制造商——比 Win32_ComputerSystem 的 TotalPhysicalMemory 更细,且不依赖 .NET 的 GC.GetTotalMemory 这种运行时估算值。
-
Win32_Processor可能返回多条记录(多 CPU 主板),别只取[0],用foreach遍历并累加NumberOfCores -
Win32_PhysicalMemory的Capacity是ulong字节,直接除1024L * 1024L * 1024L转 GB,别用Math.Pow(1024,3),浮点误差会导致 15.99 GB 这类显示 - 避免用
Win32_OperatingSystem.TotalVisibleMemorySize当物理内存——它含页面文件,数值偏大且不稳定
硬盘型号和温度不能只靠 Win32_DiskDrive
Win32_DiskDrive 能拿到型号(Model)、接口(InterfaceType)、总大小(Size),但拿不到实时温度、健康状态(SMART)。WMI 本身不暴露温度,得靠第三方驱动或 WMI 扩展(如 OpenHardwareMonitor 的 WMI provider),或者切换到 Microsoft.Win32.SafeHandles + ATA PASS THROUGH。
- 查 SSD/HDD 型号优先用
Win32_DiskDrive,别用Win32_Volume(那是卷,不是物理盘) - 想查 SMART 温度?装 OpenHardwareMonitor 后,查
Root\OpenHardwareMonitor命名空间下的Sensor类,过滤SensorType == "Temperature" -
Win32_DiskDrive的SerialNumber在某些 NVMe 盘上为空,需 fallback 到PNPDeviceID截取后缀
显卡信息注意集成与独显共存场景
Win32_VideoController 会同时列出核显和独显(比如 Intel HD Graphics + NVIDIA GeForce),但 AdapterRAM 返回的是显存,不是 GPU 总可用内存;CurrentBitsPerPixel 和 VideoProcessor 才反映实际渲染能力。
- 区分主显卡:检查
Availability == 3(3 = Running/Full Power)且ConfigManagerErrorCode == 0 -
AdapterRAM是显存大小(字节),但核显会报告共享内存(如 “Shared Memory”),此时值不可信,应结合VideoProcessor字符串判断是否为 Intel/NVIDIA/AMD - 不要用
Win32_DisplayConfiguration——它已被弃用,Win10+ 返回空,且不包含硬件型号
WMI 查询不是“写完就能跑”,每类硬件背后都有权限、命名空间、驱动支持、多实例处理四个隐性关卡,漏掉一个就返回空或报错。真正上线前,务必在干净系统(无 OpenHardwareMonitor 等工具)下逐项验证。


















