当为32位exe加载32位库时,Windows 7 64位错误PATH

esp*_*DOH 5 path 32bit-64bit windows-7

我有一个依赖于libeay32.dll的exe.两者都编译为32位.

我已将exe复制到C:\ Program files(x86)\ app\bin,将dll复制到C:\ Program files(x86)\ app\lib.为确保正常工作,我已将C:\ Program files(x86)\ app\lib添加到路径中.

在Windows 7 64位上,当我执行exe时,我找到了libeay32.dll未找到错误.

使用32位的依赖性walker,该库正确位于C:\ Program files(x86)\ app\lib.使用sysinternal进程资源管理器正确执行应用程序.使用cmd也有效.使用64位的依赖性walker,我可以看到丢失的库.复制两个文件toghether或dll到syswow64也完美.

如果应用程序编译为32位...

为什么没有Windows寻找32位库?如果目录已经在路径上,为什么不解析库?

我的猜测是w7忽略了路径,但根据这个:http: //msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx 它不应该!

为什么我不能运行我的exe与位于路径上的依赖项?我应该注册图书馆还是什么?

任何想法将不胜感激.

编辑:

程序从开始菜单 - >程序完成后正确启动/执行,但不能直接在.exe ... wtf?

使用procmon似乎试图打开(注意缺少""):"C:\ Program Files(x86)\ myapp\Third-Party\openssl\LIBEAY32.dll"但在路径中它是正确的(重新检查:"C :\ Program Files(x86)\ myapp\Third-Party\openssl")

回答?:有一个知道场景/错误,在路径上设置"C:\ Program Files(x86)",导致窗口尝试加载"C:\ Program Files(x86)"而不是 ????(请参阅使用procmon任何过滤器)

Windows 7 x64错误?

Yve*_*esR 0

您可以将 lib 移动到同一目录中,因为它总是首先检查。如果找到,则使用它。在 Windows 64 位系统上,您还可以(未尝试)将库移动到存储 32 位版本的 SystemWOW64 文件夹,但我建议使用第一个版本。