2013-10-17 57 views
2

我在我機智的一端試圖註冊一個COM程序集。我不斷收到這(而無益的錯誤),說明如何在Windows 7中註冊COM程序集?

Retrieving the COM class factory for component with CLSID {GuidID} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

該組件是寫在.NET 4.5庫的引用的一部分。該庫是.NET 4.5 Web服務中的參考。程序集是Interop.AssemblyName。我已驗證Interop.AssemblyName.dll存在於web服務的bin文件夾中。這些項目只是使用VS2012從.NET 2.0升級而來。

我試過用REGSVR32.exe(失敗,沒有DLLEntryPoint),gacutil.exe(說它安裝正確)和Regasm(32位和64位,都表示安裝成功)註冊程序集最後,我已經嘗試將構建輸出從「任何CPU」更改爲「x86」。

上面這些東西都沒有做任何事情來解決這個錯誤。在它決定運作之前,這個愚蠢的集會可能想要註冊哪些東西?

回答

0

您正在混合原生COM組件和爲其生成的互操作庫。缺少的是本地COM組件,互操作庫在正確註冊時不起作用。互操作庫僅用於使CLR輕鬆使用該組件。它應該不是被註冊,Regsvr32.exe抱怨的原因。

聽起來你並沒有發現原生組件,我們也無法幫你找到它。項目文件中的<COMReference>條目可以幫助您找到它,Guid元素會告訴您在Regedit.exe的註冊表中何處查找。但它需要安裝在機器上以擺脫運行時錯誤。聯繫組件的所有者或供應商以獲取安裝說明。

請注意,Web服務通常以64位模式運行。傳統COM組件幾乎總是32位。您需要服務器上的32位應用程序池才能保持兼容。

+0

感謝Hans,這有助於爲我清除一些事情。我在哪裏可以找到條目?我在.csproj文件的xml中查找了引用interop的程序集和引用程序集的WebService。我沒有看到任何標籤。我還在使用ILSpy查看Interop,希望能夠找到線索,但沒有發現任何有用的東西。你有什麼其他的想法,我可以在哪裏搜索提示? – Dave

+0

好吧,我碰巧遇到了一個幸運的Google搜索,發現有人遇到了與Interop相同的問題。從他們的帖子中,我能夠找到相應的COM名稱。一旦我REGSVR32正確的.dll,我能擺脫運行時錯誤。感謝您的幫助。 – Dave

相關問題