C# 我如何解决一个问题;提供程序加载失败“;用于WMI请求?

C# 我如何解决一个问题;提供程序加载失败“;用于WMI请求?,c#,.net,wmi,C#,.net,Wmi,我正在使用WMI收集系统信息。它在我测试过的每个系统上都能正常工作,但我有一两个用户报告了问题。调试日志显示WMI代码引发“提供程序加载失败”异常。我无法复制这个问题 用户已验证WMI服务正在自动模式下运行 例外情况如下: System.Management.ManagementException: Provider load failure at System.Management.ManagementException.ThrowWithExtendedInfo(Management

我正在使用WMI收集系统信息。它在我测试过的每个系统上都能正常工作,但我有一两个用户报告了问题。调试日志显示WMI代码引发“提供程序加载失败”异常。我无法复制这个问题

用户已验证WMI服务正在自动模式下运行

例外情况如下:

System.Management.ManagementException: Provider load failure 
   at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()

关于如何排除故障并解决此问题有何想法?

您可能需要确认所有DLL都已正确注册(请参阅)。

WMI注册都保存在WMI(静态类)中


WMI CIM Studio(来自MS,IIRC的WMI工具的一部分)对于探索这些类很有用(当然比编写大量查询更容易)。

在具有用户帐户控制的操作系统上关闭UAC

在我的例子中:Ross关于的回答没有解决。我可以加载一些WMI提供程序(logicaldisk),但不能加载其他(IIS)。WMI浏览器工具(如PowerGui)将显示该提供程序。这表明安全策略可以阻止加载WMI提供程序。一旦关闭UAC,所有WMI提供程序都将加载,不会出错


当然,您可能想让UAC保持开启状态。如果我发现需要的具体政策,我会更新此答案。

因此,我知道这是一个老问题,但我遇到了上面描述的确切问题。我很难弄清楚,所以我想我会回应,希望它能帮助其他人解决问题

我试图加载IIS WMI提供程序,但出现“提供程序加载失败”错误。我可以通过使用wbemtest.exe程序运行WMI查询来重现此问题

我启动了procmon.exe以显示正在加载的内容(或者在我的情况下未能加载),果然,wmiprvse.exe正在加载一个注册表项,该注册表项表示inetsrv位于C:\windows目录中,该目录在我的计算机上不存在(C:\windows已被C:\winnt替换)


更新密钥解决了我的问题,但这里更重要的一点是,我花了很长时间试图弄清楚为什么会出现此错误,并且在执行WMI查询时运行procmon正好指出了问题所在。希望您也能这样做。

可能找到问题根源的一种方法是使用微软的脚本编写人员说,这是最简单的方法之一

“要查找WMI类的提供程序…”

脚本编写人员:

infoSupport的Mark Wolzak在本文中介绍了Win32_NetworkAdapter特有的高级步骤

  • 单击开始>>运行>>wbemtest
  • 单击“连接…”以连接到命名空间
  • 执行查询“从MSFTwmiselfevent中选择*
  • 向下滚动到底部并跟踪以下WMI事件
  • 查看导致问题的dll的任何Msft_WmiProvider_初始化操作失败事件或Msft_WmiProvider_LoadOperationFailureEvent的详细信息

感谢Richard Siddaway博客上的帖子为我指出了这个工具和具体的方法。

或者,只需运行您的工具(“作为管理员”)。奇怪的是,本地访问MicrosoftiSv2提供程序需要提升,即使您可以毫无问题地远程访问它……尽管它标记为“应答”,但在许多情况下,它并不是解决方案。通常只有在查询一些表的实例时才会出现问题(例如,
Win32\u NetworkAdapter
:)其他表也可以正常工作。这也发生在.NET 2.0上,它甚至没有本答案链接中提到的System.Management.Instrumentation.dll。在这些情况下,此错误的原因可能是第三方驱动程序实现有问题,您对此无能为力。真的吗?为什么投反对票?我实际上使用了这些步骤修复我们的一个开发系统的问题。WBEMTest为+1。我一直使用PowerShell调试WMI内容,这已经足够好了,但WBEMTest是专门为此设计的。