Можно ли добавить каталог к ​​пути поиска DLL из командного файла или сценария cmd? - PullRequest
10 голосов
/ 06 февраля 2009

MSDN говорит, что функция SetDllDirectory () может использоваться для вставки каталога в Путь поиска DLL . Можно ли получить доступ к этой функции из командного файла или сценария cmd, возможно, используя cscript ?

Цель состоит в том, чтобы наша версия для разработки библиотеки dll была найдена ранее существовавшей более старой версии в% WINDIR% и т. Д. Без необходимости писать программу только для этого.

Заранее спасибо за ваше время и мысли.

Ответы [ 3 ]

11 голосов
/ 06 февраля 2009

Цель состоит в том, чтобы наше развитие версия DLL найдена до ранее существовавший более старый в% WINDIR% и т.д. без необходимости писать программу только для этого.

Если DLL не находится в той же папке, что и исполняемый файл Windows, будет искать файл в папках, указанных в системном пути. Поэтому все, что вам нужно сделать, это поместить вашу папку в начало пути.

Это можно сделать с помощью следующей пакетной команды:

 set PATH=c:\MyDLLFolder;%PATH%

Если ваш путь содержит пробелы, вам нужно использовать следующую пакетную команду:

 set PATH="C:\My DLL Folder";%PATH%

Но помните, что это изменение пути выполняется только в PATH текущего сеанса консоли. Если вы закроете и снова откроете консоль, эти изменения пути будут потеряны.

8 голосов
/ 06 февраля 2009

Вы можете поместить DLL в тот же путь, что и исполняемый файл, который ищется первым перед% WINDIR%. Невозможно напрямую вызвать SetDllDirectory из командного файла.

Но вы можете вставить свой каталог DLL в переменную% PATH%, и Windows найдет там DLL.

set PATH=C:\path to your dll;%PATH%
5 голосов
/ 20 августа 2014

Чтобы устранить спор о порядке поиска в 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#standard_search_order_for_desktop_applications

...