Я хочу временно добавить каталог в пути поиска DLL - есть ли правильный способ сделать это в Windows 7?
Сценарий
У меня есть приложение на C #, назовем его WonderApp.
WonderApp необходимо вызвать DLL C ++, расположенную в C:\MyPath
.Поэтому, как часть Program.Main()
WonderApp, я добавил следующую команду:
Environment.SetEnvironmentVariable("PATH",
"C:\\MyPath;" + Environment.GetEnvironmentVariable("PATH"));
Согласно этой статье , добавление каталога в PATH
также должно добавить его в каталогипоиск DLL.
Решение отлично работает в Windows XP: если я добавлю каталог в PATH
, DLL загрузится, и программа будет работать нормально.Если я не добавлю каталог, DLL не загрузится, что приведет к ошибке «not found».
Однако, это не работает для Windows 7.
Так что японял, давайте попробуем использовать SetDllDirectory()
.Например:
[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetDllDirectory(string lpPathName);
И позже:
bool success = SetDllDirectory(Util.Paths.GetApplicationDataDir());
Значение success
равно true
, но DLL все равно не загружается.
Наконец, если я установлю PATH
для включения C:\MyPath
вручную, перед запуском приложения - все работает!DLL загружается и работает очень хорошо.
Итак, еще раз:
Есть ли правильный способ временно добавить каталог в пути поиска DLL вWindows 7?
ОБНОВЛЕНИЕ: Используя Process Explorer, я проверил среду выполнения приложения, и "C: \ MyPath" действительно был в PATH
!Кроме того, я увидел, что Helper.dll
был в списке открытых дескрипторов (как DLL, а не просто файл) - и он все еще утверждал, что не нашел его.