dll в SysWOW64 не найден приложением
Я занимаюсь разработкой приложения на C#/WPF, которое взаимодействует с USB-устройством с помощью некоторых пользовательских 32-битных библиотек. Он разработан как приложение x86 и устанавливается вместе с WIX. Когда я устанавливаю пакет на 64-разрядную машину, программные файлы устанавливаются в Program Files (x86), как и ожидалось.
DLL-файлы устанавливаются в SystemFolder с помощью WIX. На 32-битных машинах это означает C:\Windows\System32. На 64-битных они заканчиваются в C:\Windows\SysWOW64. Это нормально, но когда я запускаю свое приложение, оно не может найти dll (оно использует их через [DllImport...]).
Итак, как правильно заставить мое приложение находить библиотеки DLL, будь то System32 или SysWOW64?
Спасибо том
1 ответ
Если это приложение C# по умолчанию, оно автоматически будет 64-битным приложением в 64-битной Windows (по умолчанию C3 - 32-битная в 32-битной Windows). Зайдите в свойства проекта в вашем приложении для разработки и явно установите архитектуру (я думаю; сейчас у меня нет Studio) на 32 бита. Если оно работает как 64-битное приложение, оно не сможет использовать ваши 32-битные библиотеки DLL.
Пожалуйста, проверьте, имеет ли dll в приложении ту же версию, что и в папке sys32 или wow64, в зависимости от вашей версии Windows.
Вы можете проверить это из файла DLL.
Например: я столкнулся с этой проблемой, потому что мой файл libeay.dll в system32 имел другую dll, чем мой файл libeay.dll в приложении openssl. Я скопировал один из sys32 в openssl, и все работало хорошо.