utiles scripts por para off manejo lotes ejemplos comandos batch bat archivos batch-file cmd dll wsh

batch-file - scripts - manejo de variables en batch



¿Es posible agregar un directorio a la ruta de búsqueda de DLL desde un archivo por lotes o script cmd? (3)

MSDN dice que la función SetDllDirectory () se puede usar para insertar un directorio en la ruta de búsqueda de DLL . ¿Se puede acceder a esta función desde un archivo por lotes o un script cmd, quizás usando via cscript ?

El objetivo es tener nuestra versión de desarrollo de un archivo DLL encontrada antes de una versión antigua preexistente en% WINDIR%, etc. sin tener que escribir un programa solo para eso.

Gracias de antemano por su tiempo y pensamientos.


El objetivo es tener nuestra versión de desarrollo de un archivo DLL encontrada antes de una versión antigua preexistente en% WINDIR%, etc. sin tener que escribir un programa solo para eso.

Si el archivo DLL no está en la misma carpeta que el ejecutable, Windows buscará el archivo en las carpetas especificadas en la ruta del sistema. Entonces, todo lo que tiene que hacer es colocar su carpeta al comienzo de la ruta.

Puede hacerlo utilizando el siguiente comando por lotes:

set PATH=c:/MyDLLFolder;%PATH%

Si su ruta contiene espacios en blanco, debe usar el siguiente comando por lotes:

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

Pero recuerde que este cambio de ruta solo se realiza en la RUTA de la sesión de la consola actual. Si cierra y vuelve a abrir la consola, estos cambios de ruta se perderán.


Para aclarar la disputa en el orden de búsqueda dll (en los comentarios en la respuesta de @ jussij), aquí está la lista, extraída del documento de Microsoft:

Si SafeDllSearchMode está habilitado, el orden de búsqueda es el siguiente:

  1. El directorio desde el que se cargó la aplicación.
  2. El directorio del sistema Use la función GetSystemDirectory para obtener la ruta de este directorio.
  3. El directorio del sistema de 16 bits. No hay ninguna función que obtenga la ruta de este directorio, pero se busca.
  4. El directorio de Windows. Use la función GetWindowsDirectory para obtener la ruta de este directorio.
  5. El directorio actual.
  6. Los directorios que se enumeran en la variable de entorno PATH. Tenga en cuenta que esto no incluye la ruta por aplicación especificada por la clave de registro App Paths. La clave App Paths no se usa al calcular la ruta de búsqueda de DLL.

Si SafeDllSearchMode está deshabilitado, el orden de búsqueda es el siguiente:

  1. El directorio desde el que se cargó la aplicación.
  2. El directorio actual.
  3. El directorio del sistema Use la función GetSystemDirectory para obtener la ruta de este directorio.
  4. El directorio del sistema de 16 bits. No hay ninguna función que obtenga la ruta de este directorio, pero se busca.
  5. El directorio de Windows. Use la función GetWindowsDirectory para obtener la ruta de este directorio.
  6. Los directorios que se enumeran en la variable de entorno PATH. Tenga en cuenta que esto no incluye la ruta por aplicación especificada por la clave de registro App Paths. La clave App Paths no se usa al calcular la ruta de búsqueda de DLL.

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


Puede colocar el archivo DLL en la misma ruta que el archivo ejecutable, que se busca primero antes de% WINDIR%. No hay forma de llamar a SetDllDirectory directamente desde un archivo por lotes.

Pero puede insertar su directorio DLL en la variable% PATH%, y Windows luego encontrará la DLL allí.

set PATH=C:/path to your dll;%PATH%