У меня есть приложение, которое использует несколько управляемых библиотек. Эти управляемые библиотеки, в свою очередь, полагаются на некоторые неуправляемые библиотеки.
Когда я развертываю приложение на компьютере под управлением XP, оно работает нормально. Когда я делаю то же самое на компьютере под управлением Vista, я получаю исключение DLL not found.
Я пытался выполнить проект установки VS2010 и установщик NSIS, и в обоих случаях он одинаков.
Почему это могло случиться? Что я могу сделать, чтобы обойти это?
Обновление - Дополнительная информация
- Оба установщика проверяют установку .NET 4.0 и устанавливают ее при необходимости
- Компьютер Vista является 64-разрядным, но установка, как и ожидалось, направляется в папку с программными файлами x86
- В обоих случаях у меня есть учетная запись администратора
- Библиотеки DLL находятся в том же каталоге, что и исполняемый файл
- Насколько я могу судить, файлы копируются в нужный каталог
Обновление 2
- Полная ошибка в http://pastebin.ca/2046487
- DLL - это Audiere.Net.dll, которая является моей и является управляемой библиотекой.
Я не уверен, что эта ошибка означает, что он не может найти Audiere.Net.dll или не может загрузить его, потому что не может быть найдена одна из его зависимостей.
Обновление 3 - материал из Process Monitor
После запуска монитора процесса (спасибо Mehrdad!) Есть несколько записей, которые не имеют статуса «УСПЕХ». Некоторые из них «ИМЯ НЕ НАЙДЕНО», а некоторые «ПУТЬ НЕ НАЙДЕН». (Он даже запрашивает файлы PDB, которые, как я думал, использовались только отладчиком.) Очень трудно понять, какие записи могут привести к фактическому сбою. В любом случае, я загрузил журнал (отфильтрованный, чтобы найти соответствующий путь) на случай, если он что-то значит для кого-либо.
Обновление 4 - добавлены файлы .pdb
Так что я немного отчаялся и включил файлы .pdb в вывод установщика. Я думал, что это будет бесполезно, но на самом деле это привело к более полезной ошибке. Вместо того, чтобы просто сказать, что DLL не найдена, я теперь получаю исключение BadImageFormatException. Поискивая это говорит мне, что это распространенная проблема для двоичных файлов, скомпилированных на x86, но работающих на x64 (как на машине с Vista).
Предлагаемое решение - принудительно настроить его на x86, но Audiere.Net.dll уже был. Может ли ошибка заключаться в библиотеке, которую она упаковывает?