Windows 7 64-битный неверный путь при загрузке 32-битной библиотеки для 32-битных EXE - PullRequest
5 голосов
/ 06 сентября 2011

У меня есть exe, который зависит от libeay32.dll. Оба скомпилированы для 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 Process Explorer, приложение выполняется правильно. Использование cmd также работает. Используя средство обхода зависимостей для 64 бит, я могу увидеть недостающие библиотеки. Копирование двух файлов вместе или dll в syswow64 также отлично работает.

Если приложение было скомпилировано для 32 бит ...

Почему Windows не ищет 32-битные библиотеки? Почему библиотеки не разрешены, если каталог уже находится в пути?

Я предполагаю, что w7 игнорирует путь, но в соответствии с этим: http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx это не должно!

Почему я не могу запустить свой exe с зависимостями, расположенными на пути? Должен ли я зарегистрировать библиотеку или что-то?

Любые идеи будут высоко оценены.

EDIT:

Программа корректно запускается / выполняется, когда выполняется из меню Пуск-> Программа, но не напрямую в .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?

1 Ответ

0 голосов
/ 26 октября 2011

Вы можете закачать библиотеку в один и тот же каталог, потому что там она всегда проверяется первой. Если его нашли, он используется. В 64-битных системах Windows вы можете (не пытались) также переместить библиотеки в папку SystemWOW64, где хранятся 32-битные версии, но я бы порекомендовал первую версию.

...