Можно ли добавить каталог к ​​пути поиска 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 включен, порядок поиска следующий:

  1. Каталог, из которого загружено приложение.
  2. Системный каталог. Использовать GetSystemDirectory функция, чтобы получить путь к этому каталогу.
  3. 16-битный системный каталог. Нет функции, которая получает путь к этому каталогу, но она ищется.
  4. Каталог Windows. Использовать GetWindowsDirectory функция, чтобы получить путь к этому каталогу.
  5. Текущий каталог.
  6. Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра "Пути к приложениям". Ключ App Paths не используется при вычислении пути поиска DLL.

Если SafeDllSearchMode отключен, порядок поиска следующий:

  1. Каталог, из которого загружено приложение.
  2. Текущий каталог.
  3. Системный каталог. Использовать GetSystemDirectory функция, чтобы получить путь к этому каталогу.
  4. 16-битный системный каталог. Нет функции, которая получает путь к этому каталогу, но она ищется.
  5. Каталог Windows. Использовать GetWindowsDirectory функция, чтобы получить путь к этому каталогу.
  6. Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра "Пути к приложениям". Ключ App Paths не используется при вычислении пути поиска DLL.

См. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

Другие вопросы по тегам