2014-12-04 144 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