DLLs in System32 im Vergleich zum Systempfad

DLLs in System32 im Vergleich zum Systempfad

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 PATHUmgebungsvariable ab, %windir%\System32wird 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:

http://msdn.microsoft.com/en-us/library/ms972822.aspx

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

verwandte Informationen