Häufig höre ich Fragen wie: “Ich habe auf meinem Computer vor einiger Zeit ein Spiel / Programm installiert — nun funktioniert es nicht mehr”.
Auf Nachfrage erfahre ich meist, dass in der Zwischenzeit weitere Programme installiert bzw. deinstalliert wurden, so dass ein Wiederherstellen des Systems mit HIlfe von Widerherstellungspunkten versagt. (Wiederherstellungspunkt aktivieren)
Ein erneutes Installieren des Programmes hat auch keinen Erfolgt gebracht, dann hilft vielleicht der Dependency Walker. Dieses freien Tool wurde ursprünglich mit den Windows XP SP2 Support Tools und Microsoft Visual Studio bis Version 8.0 ausgeliefert.
Mit Dependency Walker kann man Bibliotheken auffinden, die die zu überprüfende ausführbare Datei (wie bspw. exe, dll, ocx, sys) benutzt und überprüfen, ob alle Bibliotheken richtig installiert bzw. überhaupt vorhanden sind.
Der Dependency Walker gibt ein Baumdiagramm aller von der ausführbaren Datei benötigten Module aus. Es ist sowohl für 32- als auch 64-Bit Systeme verfügbar.
Es liegt derzeit in der Version 2.2.6000 vom 29.10.2006 vor. Man kann ihn direkt von der Entwicklerseite herunterladen.
Nach dem Entpacken des Paketes kann man sofort wie mit einer Portablen Anwendung (keine Installation notwendig, könnte auf einem USB-Stick mitgenommen werden) loslegen.
Ich starte den Dependency Walker und benutze ihn gleich als Testobjekt, also “depends.exe”. Dazu klicke ich auf das Ordnersymbol .
Auf dem Screenshot sieht man sehr deutlich, dass eine Datei “dwmapi.dll” vermisst wird. Die Dateien “shlwapi.dll” und “mpr.dll” erzeugen eine Warnung. Also mache ich mich auf die Suche nach der “dwmapi.dll”. Eine Suche auf meiner lokalen Platte brachte keinen Fund. Eine mögliche Anlaufstelle wäre Google oder DLL-files.com. Hier sollte man natürlich aufpassen, dass man die vermisste Datei möglichst aus einer sicheren Quelle erhält.
Ich lade die Datei herunter und platziere sie erst einmal im selben Ordner in dem sich schon der Dependency Walker befindet. Nun restarte ich den Dependency Walker und lade ihn als zu überprüfende Datei, die gefundene dwmapi.dll scheint original von Microsoft zu sein, sie hat die Produktversion 6.0.5384.4 und besitzt den Zeitstempel 08.12.2006 16:36 Uhr. Es kommt die Warnung: “Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.” nach der Dependency-Walker-FAQ kann man diese Warung ignorieren.
Vielleicht nutzen noch andere System-DLL’s die “dwmapi.dll”, also verschiebe ich sie an einen alternativen Speicherort für System DLL’s. Dazu muss man wissen, dass ordentlich programmierte Windowsprogramme zuerst im Verzeichnis der ausführbaren Datei nach DLL’s suche, danach im System32-Verzeichnis von Windows. Dorthin verschiebe ich die DLL und schaue was passiert. Sie wird nun im System32 Verzeichnis gefunden, die Warnung ist aber immer noch da.
Wer mit englischen Fehlermeldungen ein Problem hat, kann sich alternativ die englische Fehlermeldung mit dem mehr oder weniger glücklich Babelfish übersetzen lassen. “Mindestens hat ein Modul einen ungelösten Import wegen einer fehlenden Exportfunktion in einen später zu ladenen Modul”. Der Dependency Walker findet alle, auch scheinbare Probleme, dieses hier können wir getrost ignorieren.
Zur Aufklärung: die “dwmapi.dll” war auf älteren Systemen vorhanden wurde aber durch die Installation des Internet Explorers v7 entsorgt. Andere DLL’s von Microsoft besitzen zwar einen Ansprungpunkt für die “dwmapi.dll” können das Nichtvorhandensein der Datei aber entsprechend abfangen.
So müssen wir nun jede vom Dependency Wolker vermisste DLL ausfindig machen und ggf. im Programmverzeichnis ablegen. Sollte unser Programm eine schon im System32 Verzeichnis vorhandene DLL in einer älteren Version benötigen und nicht mit der älteren Version im Programmverzeichnis arbeiten können, so haben wir meist schlechte Karten, da neuere Programme die neuere Version der DLL zum Betrieb benötigen.
1 Kommentar » Schreibe einen Kommentar