2009-02-05 20 views
8

MSDN dice che la funzione SetDllDirectory() può essere utilizzata per inserire una directory nello DLL Search Path. È possibile accedere a questa funzione da un file batch o da uno script cmd, magari utilizzando via cscript?È possibile aggiungere una directory al percorso di ricerca DLL da un file batch o da uno script cmd?

L'obiettivo è di avere la nostra versione di sviluppo di una dll trovata prima di una precedente preesistente in% WINDIR% ecc. Senza dover scrivere un programma solo per quello.

Grazie in anticipo per il vostro tempo e pensieri.

risposta

6

È possibile posizionare la DLL nello stesso percorso dell'eseguibile, che viene ricercata prima di% WINDIR%. Non c'è modo di chiamare SetDllDirectory direttamente da un file batch.

Tuttavia, è possibile inserire la directory DLL nella variabile% PATH% e Windows troverà la DLL.

set PATH=C:\path to your dll;%PATH% 
10

L'obiettivo è quello di avere la nostra versione di sviluppo di una dll trovato prima un preesistente più vecchio nella cartella% windir% ecc, senza dover scrivere un programma solo per questo.

Se la DLL non si trova nella stessa cartella dell'eseguibile, Windows cercherà il file nelle cartelle specificate nel percorso di sistema. Quindi tutto quello che devi fare è mettere la tua cartella all'inizio del percorso.

Si può fare questo usando il seguente comando batch:

set PATH=c:\MyDLLFolder;%PATH% 

Se il percorso contiene uno spazio bianco è necessario utilizzare il seguente comando batch:

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

Ma ricordate questo cambiamento percorso è solo fatto al PERCORSO della sessione di console corrente. Se chiudi e riapri la console, queste modifiche al percorso andranno perse.

+0

Questo salta passaggi in mezzo. Dopo aver cercato la directory 1) è in esecuzione il file .exe di chiamata, Windows cerca 2) la directory di sistema, 3) la directory di sistema a 16 bit, 4) la directory di windows, 5) la directory corrente, 6) e NOW finalmente cerca% path%. Vedere il/Search Path/DLL nella domanda. –

+0

La risposta è corretta per quanto riguarda il percorso di ricerca EXE, BAT, COM (per quanto ne so). –

+0

Matt, è per questo che ho qualificato il mio commento con "Se la DLL non si trova nella stessa cartella dell'eseguibile". Per quanto riguarda le persone che sono abbastanza stupide da mettere le loro dll non di sistema nelle cartelle di sistema, allora buona fortuna a loro;) – jussij

3

per chiarire la disputa su l'ordine di ricerca DLL (nei commenti su di @ jussij risposta), ecco l'elenco, tratto dal documento di Microsoft:

Se SafeDllSearchMode è abilitata, l'ordine di ricerca è il seguente:

  1. La directory da cui è stata caricata l'applicazione.
  2. La directory di sistema. Utilizzare la funzione GetSystemDirectory per ottenere il percorso di questa directory.
  3. La directory di sistema a 16 bit. Non esiste una funzione che ottenga il percorso di questa directory, ma viene cercata.
  4. La directory di Windows. Utilizzare la funzione GetWindowsDirectory per ottenere il percorso di questa directory.
  5. La directory corrente.
  6. Le directory elencate nella variabile di ambiente PATH. Si noti che questo non include il percorso per applicazione specificato dalla chiave di registro App Paths. La chiave App Paths non viene utilizzata durante il calcolo del percorso di ricerca DLL.

Se SafeDllSearchMode è disabilitato, l'ordine di ricerca è il seguente:

  1. La directory da cui l'applicazione caricata.
  2. La directory corrente.
  3. La directory di sistema. Utilizzare la funzione GetSystemDirectory per ottenere il percorso di questa directory.
  4. La directory di sistema a 16 bit. Non esiste una funzione che ottenga il percorso di questa directory, ma viene cercata.
  5. La directory di Windows. Utilizzare la funzione GetWindowsDirectory per ottenere il percorso di questa directory.
  6. Le directory elencate nella variabile di ambiente PATH. Si noti che questo non include il percorso per applicazione specificato dalla chiave di registro App Paths. La chiave App Paths non viene utilizzata durante il calcolo del percorso di ricerca DLL.

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

Problemi correlati