作为更大的 C# 代码库的一部分,我一直在同一台机器(Windows XP SP2)上定期运行以下查询:
“从 Win32_Process 中选择 *”
直到今天,它一直按预期工作。现在,查询无限期挂起而不返回任何结果。我尝试在这台机器上查询其他几个 WMI 提供程序类,它们按预期工作。
我重启了机器,但没用。我检查了应用程序事件日志,WMI 在其中报告错误,但那里没有任何线索。我还尝试了其他两种枚举 Win32_Process 实例的方法:VBscript 和 WMI CIM Studio。两者都以同样的方式挂起。
我尝试运行 Microsoft 提供的诊断脚本 WMIDiag.vbs。但是,它在“验证在执行 WMIDiag 之前加载的 WMI 提供程序”步骤中无限期挂起。文档确实说该脚本最多可能需要 6 小时才能运行,但它已经挂起在 0% CPU 使用率上超过 12 个小时了。
我在这里不知所措。有人能解释一下为什么 Win32_Process 类可能停止工作,而其余的 WMI 类却正常运行吗?我强烈希望专门修复此问题,而不是放弃并清理机器。
如果有任何额外的系统信息有用,请告诉我。我不知道下一步该如何进行故障排除。
答案1
该计算机上的 WMI 可能已损坏。请尝试重新安装。
将以下所有行复制到批处理文件中并运行:
net stop winmgmt
pause
c:
cd c:\windows\system32\wbem
rd /S /Q repository
regsvr32 /s %systemroot%\system32\scecli.dll
regsvr32 /s %systemroot%\system32\userenv.dll
mofcomp cimwin32.mof
mofcomp cimwin32.mfl
mofcomp rsop.mof
mofcomp rsop.mfl
for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s
for /f %%s in ('dir /b *.mof') do mofcomp %%s
for /f %%s in ('dir /b *.mfl') do mofcomp %%s
mofcomp exwmi.mof
mofcomp -n:root\cimv2\applications\exchange wbemcons.mof
mofcomp -n:root\cimv2\applications\exchange smtpcons.mof
mofcomp exmgmt.mof