我正在使用WMI来收集系统信息。它在我测试过的每个系统上运行良好,但我有一两个用户报告问题。调试日志显示WMI代码引发“提供程序加载失败”异常。我无法复制这个问题。
用户已验证WMI服务正在自动模式下运行。
以下是例外:
System.Management.ManagementException: Provider load failure
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
有关如何排查和解决此问题的任何想法?
答案 0 :(得分:5)
可能追踪问题根本原因的一种方法是使用WBEMTest MS Scripting Guys所说的工具是最简单的方法之一
“找到WMI类的提供者......”
脚本专家:Use PowerShell to Troubleshoot “Provider Load Failure”
特定于Win32_NetworkAdapter的高级步骤在InfoSupport的Mark Wolzak的这篇Win32_network adapter "provider load failure"帖子中有所描述。
感谢Richard Siddaway博客上的WMI–Provider Load Failure帖子,指出我使用此工具和具体方法。
答案 1 :(得分:2)
您可能需要确认所有dll都已正确注册(请参阅http://msdn.microsoft.com/en-us/library/bb961987.aspx)。
答案 2 :(得分:2)
在使用用户帐户控制的操作系统上关闭UAC。
就我而言:罗斯的答案没有解决。我可以加载一些WMI提供程序(logicaldisk)但不加载其他(IIS)。 WMI资源管理器工具(如PowerGui)将显示提供程序。这表明安全策略可以阻止加载WMI提供程序。关闭UAC后,所有WMI提供程序都会加载而不会出错。
当然,你可能想要离开UAC。如果我找到所需的具体政策,我会更新此答案。
答案 3 :(得分:2)
所以,我知道这是旧的,但我遇到了上面描述的确切问题。对我来说真的很难弄明白,所以我想我会做出回应,希望能帮助其他人。
我试图加载IIS WMI Provider并收到“Provider Load Failure”错误。我可以通过使用wbemtest.exe程序运行我的WMI查询来重现该问题。
我启动procmon.exe来显示正在加载的内容(或者在我的情况下无法加载),果然,wmiprvse.exe正在加载一个注册表项,说inetsrv位于C:\ windows目录中 - 我的机器上不存在(C:\ windows已被c:\ winnt替换)
更新密钥解决了我的问题,但更重要的是,我有一个时间试图弄清楚为什么我收到此错误,并且在执行我的WMI查询时运行procmon指出我正确的问题。希望它也适合你。
答案 4 :(得分:1)
WMI注册全部保存在WMI中(静态类。
WMI CIM Studio(来自MS,IIRC的WMI工具的一部分)对于探索这些类很有用(当然比编写大量查询更容易)。