运行依赖于WMI的应用程序时出错

时间:2011-09-17 19:08:28

标签: .net deployment wmi

我刚刚开发了一个使用system.manament类的应用程序,但我的朋友在使用应用程序时遇到问题,因为它会出错。他安装了winxp sp3和.Net framework 2.0,就像我一样。

System.TypeInitializationException: The type initializer for
     

'System.Management.MTAHelper'引发了异常。 --->   System.Runtime.InteropServices.COMException(0x80040154):正在检索   具有CLSID的组件的COM类工厂   {A8F03BE3-EDB7-4972-821F-AF6F8EA34884}由于以下原因而失败   错误:80040154。          在System.Management.MTAHelper..cctor()

如何部署此应用程序以确保wmi存在? 可能是什么问题?

2 个答案:

答案 0 :(得分:2)

消息中给出的0x80040154 HRESULT错误意味着所使用的COM类未在系统上注册。 (它也可能意味着没有注册依赖类;您的COM类无法解析依赖项,并且会返回此错误代码,从而导致引发异常。)

您的计算机上安装的操作系统或框架与您的朋友之间存在明显差异。我们无法告诉您它们可能是什么,因为您没有发布任何代码。您可以通过在计算机上的Windows注册表中搜索错误消息(CLSID)中显示的{A8F03BE3-EDB7-4972-821F-AF6F8EA34884}来开始跟踪它。

答案 1 :(得分:2)

确保WMI正在运行。在命令行中:

net start winmgmt

如果您将应用分发为Windows服务,则可以在服务安装期间放置dependency on WMI。值得一看this

  

所以我去了   HKCR \ CLSID {A8F03BE3-EDB7-4972-821F-AF6F8EA34884} \ InprocServer32的(默认)   在我的x64环境中,看到以下路径:   C:\ WINDOWS \ SYSTEM32 \ mscoree.dll中。

     

客户更改了他找到的C:\ WINDOWS \ SysWOW64 \ mscoree.dll路径   那里是正确的,他没有再次得到错误。

如果您将注册表称为Ken White suggests且它没有'HKCR \ CLSID {A8F03BE3-EDB7-4972-821F-AF6F8EA34884}',则可能值得重新安装.NET。另请查看this