Dependency Walker

8 10 2008

Häu­fig höre ich Fra­gen wie: “Ich habe auf mei­nem Com­pu­ter vor eini­ger Zeit ein Spiel / Pro­gramm instal­liert — nun funk­tio­niert es nicht mehr”.

Auf Nach­frage erfahre ich meist, dass in der Zwi­schen­zeit wei­tere Pro­gramme instal­liert bzw. dein­stal­liert wur­den, so dass ein Wie­der­her­stel­len des Sys­tems mit HIlfe von Wider­her­stel­lungs­punk­ten ver­sagt. (Wie­der­her­stel­lungs­punkt akti­vie­ren)

Ein erneu­tes Instal­lie­ren des Pro­gram­mes hat auch kei­nen Erfolgt gebracht, dann hilft viel­leicht der Depen­dency Wal­ker. Die­ses freien Tool wurde ursprüng­lich mit den Win­dows XP SP2 Sup­port Tools und Micro­soft Visual Stu­dio bis Ver­sion 8.0 ausgeliefert.

Mit Depen­dency Wal­ker kann man Biblio­the­ken auf­fin­den, die die zu über­prü­fende aus­führ­bare Datei (wie bspw. exe, dll, ocx, sys) benutzt und über­prü­fen, ob alle Biblio­the­ken rich­tig instal­liert bzw. über­haupt vor­han­den sind.

Der Depen­dency Wal­ker  gibt ein Baum­dia­gramm aller von der aus­führ­ba­ren Datei benö­tig­ten Module aus. Es ist sowohl für 32– als auch 64-Bit Sys­teme verfügbar.

Es liegt der­zeit in der Ver­sion 2.2.6000 vom 29.10.2006 vor. Man kann ihn direkt von der Ent­wick­ler­seite herunterladen.

Nach dem Ent­pa­cken des Pake­tes kann man sofort wie mit einer Por­ta­blen Anwen­dung (keine Instal­la­tion not­wen­dig, könnte auf einem USB-Stick mit­ge­nom­men wer­den) loslegen.

Ich starte den Depen­dency Wal­ker und benutze ihn gleich als Test­ob­jekt, also “depends.exe”. Dazu kli­cke ich auf das Ord­ner­sym­bol dw001.

dw003 Auf dem Screen­shot sieht man sehr deut­lich, dass eine Datei “dwmapi.dll” ver­misst wird. Die Dateien “shlwapi.dll” und “mpr.dll” erzeu­gen eine War­nung. Also mache ich mich auf die Suche nach der “dwmapi.dll”. Eine Suche auf mei­ner loka­len Platte brachte kei­nen Fund. Eine mög­li­che Anlauf­stelle wäre Google oder DLL-files.com. Hier sollte man natür­lich auf­pas­sen, dass man die ver­misste Datei mög­lichst aus einer siche­ren Quelle erhält.

dw004Ich lade die Datei her­un­ter und plat­ziere sie erst ein­mal im sel­ben Ord­ner in dem sich schon der Depen­dency Wal­ker befin­det. Nun restarte ich den Depen­dency Wal­ker und lade ihn als zu über­prü­fende Datei, die gefun­dene dwmapi.dll scheint ori­gi­nal von Micro­soft zu sein, sie hat die Pro­dukt­ver­sion 6.0.5384.4 und besitzt den Zeits­tem­pel 08.12.2006 16:36 Uhr. Es kommt die War­nung: “Warning: At least one module has an unre­sol­ved import due to a mis­sing export func­tion in a delay-load depen­dent module.” nach der Dependency-Walker-FAQ kann man diese Warung ignorieren.

dw005 Viel­leicht nut­zen noch andere System-DLL’s die “dwmapi.dll”, also ver­schiebe ich sie an einen alter­na­ti­ven Spei­cher­ort für Sys­tem DLL’s. Dazu muss man wis­sen, dass ordent­lich pro­gram­mierte Win­dows­pro­gramme zuerst im Ver­zeich­nis der aus­führ­ba­ren Datei nach DLL’s suche, danach im System32-Verzeichnis von Win­dows. Dort­hin ver­schiebe ich die DLL und schaue was pas­siert. Sie wird nun im System32 Ver­zeich­nis gefun­den, die War­nung ist aber immer noch da.

Wer mit eng­li­schen Feh­ler­mel­dun­gen ein Pro­blem hat, kann sich alter­na­tiv die eng­li­sche Feh­ler­mel­dung mit dem mehr oder weni­ger glück­lich Babel­fish über­set­zen las­sen. “Min­des­tens hat ein Modul einen unge­lös­ten Import wegen einer feh­len­den Export­funk­tion in einen spä­ter zu lade­nen Modul”. Der Depen­dency Wal­ker fin­det alle, auch schein­bare Pro­bleme, die­ses hier kön­nen wir getrost ignorieren.

Zur Auf­klä­rung: die “dwmapi.dll” war auf älte­ren Sys­te­men vor­han­den wurde aber durch die Instal­la­tion des Inter­net Explo­rers v7 ent­sorgt. Andere DLL’s von Micro­soft besit­zen zwar einen Ansprung­punkt für die “dwmapi.dll” kön­nen das Nicht­vor­han­den­sein der Datei aber ent­spre­chend abfangen.

So müs­sen wir nun jede vom Depen­dency Wol­ker ver­misste DLL aus­fin­dig machen und ggf. im Pro­gramm­ver­zeich­nis able­gen. Sollte unser Pro­gramm eine schon im System32 Ver­zeich­nis vor­han­dene DLL in einer älte­ren Ver­sion benö­ti­gen und nicht mit der älte­ren Ver­sion im Pro­gramm­ver­zeich­nis arbei­ten kön­nen, so haben wir meist schlechte Kar­ten, da neuere Pro­gramme die neuere Ver­sion der DLL zum Betrieb benötigen.