reindirizzamento della libreria Dynamic-Link

Le applicazioni possono dipendere da una versione specifica di una DLL condivisa e avviare l'esito negativo se un'altra applicazione viene installata con una versione più recente o precedente della stessa DLL. Esistono due modi per assicurarsi che l'applicazione usi la DLL corretta: reindirizzamento DLL e componenti side-by-side. Gli sviluppatori e gli amministratori devono usare il reindirizzamento DLL per le applicazioni esistenti, perché non richiede modifiche all'applicazione. Se si crea una nuova applicazione o si aggiorna un'applicazione e si vuole isolare l'applicazione da potenziali problemi, creare un componente side-by-side.

Per abilitare il reindirizzamento della DLL a livello di computer, è necessario creare una nuova chiave del Registro di sistema. Creare una nuova chiave DWORD denominata DevOverrideEnable in HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options e impostarla su 1. Dopo questo, è necessario riavviare il computer per visualizzare gli effetti.

Per usare il reindirizzamento dll, creare un file di reindirizzamento per l'applicazione. Il file di reindirizzamento deve essere denominato come indicato di seguito: App_name.local. Ad esempio, se il nome dell'applicazione è Editor.exe, il file di reindirizzamento deve essere denominato Editor.exe.local. È necessario installare il file locale nella directory dell'applicazione. È anche necessario installare le DLL nella directory dell'applicazione.

Il contenuto di un file di reindirizzamento viene ignorato, ma la sua presenza causa Windows controllare prima la directory dell'applicazione ogni volta che carica una DLL, indipendentemente dal percorso specificato in LoadLibrary o LoadLibraryEx. Se la DLL non viene trovata nella directory dell'applicazione, queste funzioni usano il consueto ordine di ricerca. Ad esempio, se l'applicazione c:\myapp\myapp.exe chiama LoadLibrary usando il percorso seguente:

c:\programmi\common files\system\mydll.dll

E, se esistono sia c:\myapp\myapp.exe.local che c:\myapp\mydll.dll, LoadLibrary carica c:\myapp\mydll.dll. In caso contrario, LoadLibrary carica c:\programmi\common files\system\mydll.dll.

In alternativa, se esiste una directory denominata c:\myapp\myapp.exe.local e contiene mydll.dll, LoadLibrary carica c:\myapp\myapp.exe.local\mydll.dll.

Se l'applicazione ha un manifesto, tutti i file locali vengono ignorati.

Se si usa il reindirizzamento DLL e l'applicazione non ha accesso a tutte le unità e directory nell'ordine di ricerca, LoadLibrary arresta la ricerca non appena viene negato l'accesso. Se non si usa il reindirizzamento DLL, LoadLibrary ignora le directory che non è possibile accedere e quindi continua la ricerca.

È consigliabile installare DLL dell'applicazione nella stessa directory contenente l'applicazione, anche se non si usa il reindirizzamento DLL. In questo modo, l'installazione dell'applicazione non sovrascrive altre copie della DLL e causa il failover di altre applicazioni. Inoltre, se si segue questa procedura consigliata, altre applicazioni non sovrascrivono la copia della DLL e causano l'esito negativo dell'applicazione.