Dynamic-Link Bibliotheksumleitung

Anwendungen können von einer bestimmten Version einer freigegebenen DLL abhängen und beginnen, fehlschlagen, wenn eine andere Anwendung mit einer neueren oder älteren Version derselben DLL installiert wird. Es gibt zwei Möglichkeiten, um sicherzustellen, dass Ihre Anwendung die richtige DLL verwendet: DLL-Umleitung und parallele Komponenten. Entwickler und Administratoren sollten die DLL-Umleitung für vorhandene Anwendungen verwenden, da keine Änderungen an der Anwendung erforderlich sind. Wenn Sie eine neue Anwendung erstellen oder eine Anwendung aktualisieren und Ihre Anwendung von potenziellen Problemen isolieren möchten, erstellen Sie eine parallele Komponente.

Um die DLL-Umleitung computerweit zu aktivieren, müssen Sie einen neuen Registrierungsschlüssel erstellen. Erstellen Sie einen neuen DWORD-Schlüssel namens DevOverrideEnable bei HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options, und legen Sie ihn auf 1 fest. Danach müssen Sie den Computer neu starten, um die Effekte anzuzeigen.

Um die DLL-Umleitung zu verwenden, erstellen Sie eine Umleitungsdatei für Ihre Anwendung. Die Umleitungsdatei muss wie folgt benannt werden: App_name.local. Wenn der Anwendungsname beispielsweise Editor.exe ist, sollte die Umleitungsdatei Editor.exe.local benannt werden. Sie müssen die lokale Datei im Anwendungsverzeichnis installieren. Sie müssen auch die DLLs im Anwendungsverzeichnis installieren.

Der Inhalt einer Umleitungsdatei wird ignoriert, seine Anwesenheit bewirkt jedoch, dass Windows zuerst das Anwendungsverzeichnis überprüfen, wenn eine DLL geladen wird, unabhängig vom Pfad, der in LoadLibrary oder LoadLibraryEx angegeben ist. Wenn die DLL nicht im Anwendungsverzeichnis gefunden wird, verwenden diese Funktionen ihre übliche Suchreihenfolge. Wenn die Anwendung beispielsweise LoadLibrary mithilfe des folgenden Pfads aufruft, c:\myapp\myapp.exe:

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

Und wenn sowohl c:\myapp\myapp.exe.local als auch c:\myapp\mydll.dll vorhanden sind, lädt LoadLibrary c:\myapp\mydll.dll. Andernfalls lädt LoadLibrary c:\program files\common files\system\mydll.dll.

Wenn ein Verzeichnis mit dem Namen c:\myapp\myapp.exe.local vorhanden ist und mydll.dll enthält, lädt LoadLibrary c:\myapp\myapp.exe.local\mydll.dll.

Wenn die Anwendung über ein Manifest verfügt, werden alle lokalen Dateien ignoriert.

Wenn Sie DLL-Umleitung verwenden und die Anwendung keinen Zugriff auf alle Laufwerke und Verzeichnisse in der Suchreihenfolge hat, wird die Suche von LoadLibrary beendet, sobald der Zugriff verweigert wird. (Wenn Sie keine DLL-Umleitung verwenden, überspringt LoadLibrary Verzeichnisse, auf die er nicht zugreifen kann, und sucht dann weiter.)

Es empfiehlt sich, Anwendungs-DLLs im selben Verzeichnis zu installieren, das die Anwendung enthält, auch wenn Sie keine DLL-Umleitung verwenden. Dadurch wird sichergestellt, dass die Installation der Anwendung keine anderen Kopien der DLL überschreibt und andere Anwendungen fehlschlägt. Wenn Sie dieser bewährten Methode folgen, überschreiben andere Anwendungen ihre Kopie der DLL nicht und führen dazu, dass ihre Anwendung fehlschlägt.