Welche Vorgabe hat Windows, wie diese Ordner nach DLLs durchsucht werden sollen? Wenn ich beispielsweise zwei Versionen derselben DLL habe, eine im Ordner „System 32“ und eine im Systempfad, wo sucht Windows dann zuerst?
Antwort1
Windows sucht zuerst nach „bekannten DLLs“, wie etwa Kernel32.dll und User32.dll.
Anschließend sucht Windows in folgender Reihenfolge nach den DLLs:
Das Windows-Systemverzeichnis. Die Funktion GetSystemDirectory ruft den Pfad dieses Verzeichnisses ab.
Das Windows-Verzeichnis. Die Funktion GetWindowsDirectory ruft den Pfad dieses Verzeichnisses ab.
Das Verzeichnis, in dem sich das ausführbare Modul für den aktuellen Prozess befindet.
Das aktuelle Verzeichnis.
Die in der Umgebungsvariablen PATH aufgelisteten Verzeichnisse.
Beachten Sie, dass unter 64-Bit-Windows 32-Bit-Prozesse das 32-Bit-Verzeichnis system32 verwenden und nicht das 64-Bit-Verzeichnis.
Vor SP1 von 2k3 oder XP ist es etwas anders.
Antwort2
Hängt von Ihrer PATH
Umgebungsvariable ab, %windir%\System32
wird aber normalerweise davor hinzugefügt %windir%
.
Aus meiner Entwicklerperspektive würde ich es möglichst vermeiden, irgendetwas in diese Ordner zu installieren, insbesondere bei neueren Betriebssystemversionen mit Side-by-Side-Assembly-Unterstützung (z. B. XP/Vista/2008).
Wenn Sie eine Anwendung installiert haben, die an beiden Stellen eine DLL abgelegt hat, würde ich mich an den Entwickler wenden, um das Problem zu beheben.
Antwort3
Schlagen Sie darauf ein:
http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx
Beachten Sie den Kommentar „Die Reihenfolge hat sich geändert!“, der auf diese Seite verweist:
Antwort4
Das Laden der DLL wird durch die Windows-API-Funktion „LoadLibrary“ übernommen und die Suchreihenfolge wird in der entsprechenden Dokumentation beschrieben:http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx