我刚刚开发了一个使用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存在? 可能是什么问题?
答案 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。