windows 7 64位加载32位exe的32位库时路径不正确

发布于 2024-12-03 05:40:02 字数 1192 浏览 3 评论 0原文

我有一个依赖于 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 位依赖项遍历器,该库正确位于 C:\Program files (x86)\app\lib。 使用 sysinternal 进程资源管理器,应用程序可以正确执行。 使用cmd也可以。 使用 64 位的 dependency walker,我可以看到丢失的库。 将两个文件一起复制或将 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 \第三方\ openssl \ LIBEAY32.dll” 但在路径中它是正确的(重新检查:“C:\Program Files (x86)\myapp\Third-Party\openssl”)

答案?: 是否存在已知场景/错误,在路径上设置“C:\Program Files (x86)”,导致窗口尝试加载“C:\Program Files(x86)”???(请参阅使用 procmon 而不使用任何过滤器)

Windows 7 x64 错误?

I have an exe which depends on libeay32.dll. Both compiled for 32 bits.

I have copied the exe to C:\Program files (x86)\app\bin and the dll to C:\Program files (x86)\app\lib.
To ensure the correct working, i have added C:\Program files (x86)\app\lib to the path.

On Windows 7 64 bits, when i execute the exe, i got a libeay32.dll not found error.

Using dependency walker for 32 bits, the library is properly located at C:\Program files (x86)\app\lib.
Using sysinternal process explorer the app is executed properly.
Using cmd also works.
Using dependency walker for 64 bits, i can see the missing libraries.
Copying the two files toghether or dll to syswow64 also works perfectly.

If the application was compiled for 32 bits...

Why isnt windows looking for 32 bits libraries?
Why arent the libraries resolved if directory is already on path?

My guess is that w7 is ignoring the path, but according to this:
http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx
it shouldnt!.

Why i cant run my exe with dependencies located on path?
Should i register the library or something?

Any ideas will be much appreciated.

EDIT:

The program its correctly launched/executed when done from start menu->program, but not directly on the .exe...wtf?

Using procmon seems to be trying to open (note the lack of " "):
"C:\Program Files(x86)\myapp\Third-Party\openssl\LIBEAY32.dll"
but in the path its correct (rechecked: "C:\Program Files (x86)\myapp\Third-Party\openssl")

ANSWER?:
is there a know scenario/bug where setting "C:\Program Files (x86)" on path, lead windows try to load "C:\Program Files(x86)" instead????(see using procmon without ANY filter)

Windows 7 x64 bug?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

新雨望断虹 2024-12-10 05:40:02

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

You can mvoe the lib into the same directory, because there it always checks first. If its found, it is used.
On Windows 64 bit systems you can (not tried) also move the libs to the SystemWOW64 folder where the 32bit versions are stored, but I would recommend the first version.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文