2013-08-01 54 views
8

運行從Visual Studio 2012在64位計算機的應用程序,顯示以下錯誤消息:級錯誤

Retrieving the COM class factory for component with CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

我使用Inventor packandgo dll庫中的VisualStudio。

任何人都知道什麼是錯誤?

+0

關於此錯誤代碼有*數百*個問題。你**必須**解釋你爲什麼不同。另外還有一個問題,就是你在擁擠的足球場裏大喊大叫,而你應該和一個爲「發明者包裝」工作的人談話,無論他們是誰。 –

回答

18

我的問題和解決方案

  1. 我有我已經安裝在2008 R2機,這是64位32位的第三方DLL。

  2. 我有一個wcf服務創建。淨4.5框架,它調用32位第三方DLL的過程。現在我已經建立了屬性設置爲'任何'cpu目標,並將其部署到64位機器。

  3. 當我試過了調用WCF服務遇到錯誤「80040154沒有註冊類(從HRESULT異常:0x80040154的(REGDB_E_CLASSNOTREG」

  4. 現在II中使用ProcMon.exe追蹤COM註冊表問題,並確定了進程正在尋找HKLM \ CLSID和HKCR \ CLSID的註冊表項,其中沒有條目

  5. 瞭解到Microsoft不會將32位com組件註冊到路徑HKLM \ CLSID,HKCR \ CLSID in 64位機器,而是將條目放在HKLM \ Wow6432Node \ CLSID和HKCR \ Wow6432Node \ CLSID路徑中。

  6. 現在衝突是64位進程嘗試調用64位機器中的32位進程,它將在HKLM \ CLSID,HKCR \ CLSID中查找註冊表項。解決辦法是我們必須強制64位進程查看HKLM \ Wow6432Node \ CLSID和HKCR \ Wow6432Node \ CLSID的註冊表項。

  7. 這可以通過將wcf服務項目屬性配置爲定位到'X86'機器而不是'Any'來實現。

  8. 部署「X86」版本的2008 R2服務器後,得到了問題「System.BadImageFormatException:無法加載文件或程序集」

  9. 解決這個badimageformatexception是「Enable32bitApplications」設置爲'True'在正確的apppool的IIS Apppool屬性中。

+1

@RohitGupta最後一顆子彈似乎是解決方案:-) – kleopatra

+0

@kleopatra,就這樣。我已編輯它以突出顯示單詞解決方案。我已經刪除了我的評論。但我無法撤銷我舉起的旗幟。我已經投了票。 –

+0

BRIL!不只是一個解決方案,而是一個詳細的描述根源(至少在我的情況下)。非常感激。 –

3

在您使用的代碼中的某處,有一個調用Win32 API CoCreateInstance來動態加載DLL並從中實例化對象。

組件ID和能夠實例化該對象的DLL之間的映射通常可以在註冊表中的HEKY_CLASSES_ROOT \ CLSID中找到。進一步討論這個問題將會解釋很多關於COM in Windows。但是錯誤表明COM guid不在註冊表中。

我對PackAndGo DLL的功能(Autodesk組件)沒有太多的瞭解,但我懷疑您只需要通過指定的安裝程序「安裝」該組件或其附帶的軟件包,以使該DLL和適當的您試圖在您的計算機上運行您的代碼的COM註冊表項。 (即運行該產品的setup.exe)。

換句話說,我認爲你需要在這臺電腦上安裝「Pack and Go」,而不是僅僅將DLL複製到目標機器上。

另外,請確定您決定根據您安裝的Pack And Go的構建風格(32位或64位),將代碼構建爲32位與64位。

1

在64位Windows機器中,COM組件需要在HKEY_CLASSES_ROOT \ CLSID(64位組件)或HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID(32位組件)中註冊自己。如果您的應用程序是在64位機器上運行的32位應用程序,則COM庫通常會在Wow64節點下查找GUID,並且如果您的應用程序是64位應用程序,則COM庫將嘗試從HKEY_CLASSES_ROOT \ CLSID加載。確保你的目標是正確的平臺,並確保你已經安裝了正確版本的庫(32/64位)。

0

我有這個問題,我解決它,當我明白調用的VB 6 COM DLL它正在尋找括號中指定的Windows註冊表。

由於錯誤只發生在一臺計算機上,我所要做的就是從它工作的計算機中導出註冊表,並將它安裝在缺少它的計算機上。

0

長久解決我確定,但這可能會幫助其他一些可憐的靈魂。

這個錯誤可以ocurre如果您在安裝包部署的DLL是不一樣的,你要引用(這些都將有不同的ID)

聽起來很明顯,但如果你做一個小的可以很容易地發生的DLL更改爲DLL,並且以前在自己的機器上安裝了該應用程序,該應用程序會重新註冊該DLL。