2011-09-17 34 views
2

我剛剛開發出使用system.manament類的應用程序,但我的朋友正在使用的應用程序,因爲它提供的錯誤有問題。他已經安裝了winxp sp3和.Net framework 2.0,就像我一樣。錯誤運行的應用程序依賴於WMI

System.TypeInitializationException: The type initializer for 

'System.Management.MTAHelper' threw an exception. ---> System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {A8F03BE3-EDB7-4972-821F-AF6F8EA34884} failed due to the following error: 80040154. at System.Management.MTAHelper..cctor()

我該如何部署此應用程序確保wmi存在? 可能是什麼問題?

+0

請注意,我引用'system.management.dll',在我的應用程序導入'system.management'。我必須部署和註冊這個DLL與我的應用程序? – Smith

+0

您無法部署和註冊這些DLL。它們是.NET框架的一部分,因此您必須完整地安裝適當版本的框架。 (他們可能取決於將不匹配或者,等等等等其他DLL) –

回答

2

確保WMI運行。在命令行:

net start winmgmt 

如果你發佈你的應用程序Windows服務可以服務在安裝過程中把dependency on WMI。這也是值得看的this

So I went to HKCR\CLSID{A8F03BE3-EDB7-4972-821F-AF6F8EA34884}\InprocServer32(Default) in my x64 environment, and saw the following path: C:\Windows\system32\mscoree.dll.

Customer changed the C:\WINDOWS\SysWOW64\mscoree.dll path he found in there to the right one, and he didn't get the error again.

如果serch主頁註冊表肯白suggests並沒有「HKCR \ CLSID {A8F03BE3-EDB7-4972-821F-AF6F8EA34884}」它可能是值得重新安裝。淨。也看看this

+0

這是錯誤的。顯示的「HRESULT」是「未註冊的類」。沒有運行的服務不會導致它。在谷歌搜索'HRESULT 0x80040154'進行多次討論。 –

+0

@ken請檢查我的評論。 – Smith

+0

關於部署,你不應該分發任何額外的dll。 System.management是.NET的一部分,您已經依賴於.NET。如果在註冊表中找不到A8F03BE3-EDB7-4972-821F-AF6F8EA34884,請嘗試重新安裝.NET。 – Dmitry

2

0x80040154HRESULT該消息中給出的錯誤意味着所使用的COM類未在系統上註冊。 (這也可能意味着依賴類沒有註冊,你的COM類無法解決的依賴,但此錯誤代碼返回導致異常被引發。)

有明顯的操作系統或之間的差異安裝在你的機器和你的朋友的框架。我們不能告訴你他們可能是什麼,因爲你沒有發佈任何代碼。你也許可以開始通過搜索計算機上的Windows註冊表中的錯誤信息({A8F03BE3-EDB7-4972-821F-AF6F8EA34884})所示的CLSID跟蹤下來。

+0

+1指出不運行WMI服務不能是問題的原因。 – Dmitry