奇怪问题解决记录:System.Management.ManagementException: 找不到

报错代码

报错代码:

ManagementClass mc = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = mc.GetInstances();

报错信息为:System.Management.ManagementException: 找不到
经查询,报错原因为:Win32_DiskDrive这个类找不到。

查找原因

这就很奇怪了,除非是及其精简的windows操作系统,不然都不可能缺少这个类的。而且该问题仅在那一台电脑上出现,其余电脑均正常。

于是乎,用两台电脑对比,继续查找问题原因。

使用PowerShell执行命令Get-CimClass -Namespace root\cimv2,查看ManagementClass构造函数中可选择的类名。

正常电脑输出:

   NameSpace:ROOT/CIMV2
CimClassName                        CimClassMethods      CimClassProperties
------------                        ---------------      ------------------
... 略 ...
Win32_DeviceChangeEvent             {}                   {SECURITY_DESCRIPTOR, TIME_CREATED, EventType}
Win32_SystemConfigurationChangeE... {}                   {SECURITY_DESCRIPTOR, TIME_CREATED, EventType}
Win32_VolumeChangeEvent             {}                   {SECURITY_DESCRIPTOR, TIME_CREATED, EventType, DriveName}
... 略 ...

输出内容包含有大量的Win32_开头的类名。而问题电脑输出的内容极少,且没有包含有任何的Win32_开头的类名。
可以确定,问题电脑的WMI存储库损坏,其中缺失了大量的内容。

解决问题

既然程序报错是因为找到不Win32_DiskDrive,那把他们重新加进来就可以了。
使用cmd以管理员权限执行下面的命令:

cd %windir%\System32\wbem
mofcomp cimwin32.mof

重新编译系统MOF,这会把系统类的定义重新注册到WMI存储库。执行后代码就不再报错了。

posted @ 2026-02-27 11:07  苦荞米  阅读(0)  评论(0)    收藏  举报