2014-12-04 280 views
6

我遇到了在Windows 7 x64下注冊* .dll的問題。REGSVR32查詢。模塊「xxxxx.dll」加載失敗

我已經嘗試將* .dll放在C:/ Windows/System32和C:/ Windows/SysWOW64中,並嘗試在提升的命令提示符下注冊「regsvr32 xxxxx.dll」。我也嘗試從一個單獨的目錄註冊它。

The module "xxxxx.dll" failed to load. 
Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. 
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail. 

事件日誌指出:

Activation context generation failed for "C:\(path-to-dll) 
Dependent Assembly 
Microsoft.VC90.ATL,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found. 
Please use sxstrace.exe for detailed diagnosis 

注:它與下面的錯誤響應我已經安裝了x86和x64 Microsoft Visual C++ 2010 Redistributable。

有趣的是,我試圖在我的工作x64 Windows 7筆記本電腦上註冊相同的* .dll並按預期註冊。我猜這是傾向於某種C++依賴關係丟失/ ATL相關的事實?

如果有人能幫助我指出正確的方向或對此事進一步闡明;我會感激不盡。

問候。

+0

你從哪裏找錯誤?這是在Windows應用程序日誌?我沒有看到有任何 – 2017-09-28 19:16:41

+0

系統登錄Windows事件查看器iirc @RennishJoseph – 2017-10-01 17:20:29

回答

10

這幾乎肯定是由於缺少依賴關係。使用像Dependency Walker這樣的工具來查找DLL所需的依賴關係。或者,如果DLL由第三方提供,請閱讀應指定所需依賴關係的文檔。

請注意,Microsoft.VC90.ATL表示MSVC的版本9是VS2008。因此,您需要安裝MSVC 2008運行時才能滿足該依賴關係。它看起來像你錯誤地安裝了MSVC 2010運行時。

最後,請不要將文件放入系統目錄。它屬於系統,不應該由您修改。

+0

感謝您使用Dependency Walker的建議。這確實是一個非常強大的工具。我並不打算將* .dll留在系統目錄中,它只是在SO上的類似帖子上提出的解決方案;我很自信地相信它。你是對的,這對我來說是一個錯誤;無論出於何種原因,我認爲Version9是VS2010而不是VS2008。安裝VS2008 x86可再發行組件解決了我的問題。謝謝您的回答。 – 2014-12-04 09:33:47

+0

系統目錄是我的寵物蟲。因此,我的小迷你咆哮! – 2014-12-04 09:34:41

+0

我不能說我不同意!我看到很多帖子,人們建議在那裏傾銷隨機* .dll。我的大寵物也是。 – 2014-12-04 09:35:16

3

Dependent Assembly Microsoft.VC90.ATL,processorArchitecture="x86"

這表示缺少Visual C++運行時模塊(請參閱Visual C++ Libraries as Shared Side-by-Side Assemblies)。它可以作爲可再分發的安裝程序(this大概是您需要的; x86變體),您需要在註冊DLL之前安裝它(這反過來依賴於缺失的組件)。

+0

嗨羅馬人。感謝您的答覆。您提供的鏈接不僅僅是有用的,而且我會明確保留它的未來庫存。乾杯! – 2014-12-04 09:43:36

+0

看看更新的答案,我添加了應該是有幫助的下載鏈接。 – 2014-12-04 09:50:18

0

我從這個錯誤信息中解脫了。在我的二進制路徑中,我有一個SPACE。剛將SPACE替換爲UNDERSCORE(_)。它爲我工作。

0

因爲我在通過Regsvr32註冊x.dll時也面臨同樣的問題,可能的原因之一是x.dll可能會損壞dll。 要使用dot net代碼中的unmanged dll導出功能,您必須使用Dllimport

1

這也是失敗的另一個原因。我自己碰到了這個。 我使用的API方法不支持Windows 7such as PathCchRemoveFileSpec,我不得不更新到較舊的deprecated PathRemoveFileSpec。我用Dependency Walker來驗證這是原因。依賴沃克說了一點。如果你看看我的屏幕截圖(下面),紅色部分顯示了實際的問題 - 它在DLL中無法解析的方法等 - 但藍色顯示的DLL實際上不是問題(這些DLL存在)。由於Dependency Walker太舊了,它有點過時了(它過時了,它認爲有些東西不時可用),但通常情況下,它也說明了事實......您只需從頂部向下滾動一下左窗格像我一樣。注意自我:請下次向下滾動。無論如何,一旦我放棄pathcch.h,一切工作。7.快樂的編碼。

enter image description here