Можно ли добавить каталог к пути поиска DLL из командного файла или сценария cmd?
MSDN говорит, что функция SetDllDirectory() может использоваться для вставки каталога в путь поиска DLL. Можно ли получить доступ к этой функции из командного файла или сценария cmd, возможно, используя cscript?
Цель состоит в том, чтобы наша dll-версия для разработки была найдена до ранее существовавшей более старой версии в%WINDIR% и т. Д. Без необходимости писать программу только для этого.
Заранее спасибо за ваше время и мысли.
3 ответа
Вы можете поместить DLL в тот же путь, что и исполняемый файл, который сначала ищется перед%WINDIR%. Невозможно напрямую вызвать SetDllDirectory из командного файла.
Но вы можете вставить свой каталог DLL в переменную%PATH%, и Windows найдет там DLL.
set PATH=C:\path to your dll;%PATH%
Цель состоит в том, чтобы наша dll-версия для разработки была найдена до ранее существовавшей более старой версии в%WINDIR% и т. Д. Без необходимости писать программу только для этого.
Если библиотека DLL не находится в той же папке, что и исполняемый файл, Windows выполнит поиск файла в папках, указанных в системном пути. Поэтому все, что вам нужно сделать, это поместить вашу папку в начало пути.
Вы можете сделать это с помощью следующей пакетной команды:
set PATH=c:\MyDLLFolder;%PATH%
Если ваш путь содержит пробелы, вам нужно использовать следующую пакетную команду:
set PATH="C:\My DLL Folder";%PATH%
Но помните, что это изменение пути выполняется только в PATH текущего сеанса консоли. Если вы закроете и снова откроете консоль, эти изменения пути будут потеряны.
Чтобы прояснить спор о порядке поиска в dll (в комментариях к ответу @jussij), вот список, взятый из документа Microsoft:
Если SafeDllSearchMode
включен, порядок поиска следующий:
- Каталог, из которого загружено приложение.
- Системный каталог. Использовать
GetSystemDirectory
функция, чтобы получить путь к этому каталогу. - 16-битный системный каталог. Нет функции, которая получает путь к этому каталогу, но она ищется.
- Каталог Windows. Использовать
GetWindowsDirectory
функция, чтобы получить путь к этому каталогу. - Текущий каталог.
- Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра "Пути к приложениям". Ключ App Paths не используется при вычислении пути поиска DLL.
Если SafeDllSearchMode
отключен, порядок поиска следующий:
- Каталог, из которого загружено приложение.
- Текущий каталог.
- Системный каталог. Использовать
GetSystemDirectory
функция, чтобы получить путь к этому каталогу. - 16-битный системный каталог. Нет функции, которая получает путь к этому каталогу, но она ищется.
- Каталог Windows. Использовать
GetWindowsDirectory
функция, чтобы получить путь к этому каталогу. - Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра "Пути к приложениям". Ключ App Paths не используется при вычислении пути поиска DLL.
См. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx