Manchmal, wenn ich ein kleines Projekt mache, bin ich nicht vorsichtig genug und füge versehentlich eine Abhängigkeit für eine DLL hinzu, die mir nicht bekannt ist. Wenn ich dieses Programm an einen Freund oder andere Personen versende, "funktioniert es nicht", weil "eine DLL" fehlt. Dies liegt natürlich daran, dass das Programm die DLL auf meinem System finden kann, aber nicht auf ihrem.
Gibt es eine Möglichkeit , um eine ausführbare Datei für DLL - Abhängigkeiten oder führen Sie das Programm in einer „sauberen“ DLL-freien Umgebung zu scannen dem Zweck zu testen , diese zu verhindern oops Situationen?
windows
dll
dependencies
orlp
quelle
quelle
dumpbin /dependents <program>
. Ich vermute, die Liste ist relevanter als die Auflistung aller DLLs in%SYSTEM%
oder%SYSTEM32%
. Siehe auch DUMPBIN-Optionen auf MSDN.Antworten:
Versuchen Sie es
Dependency Walker
(letztes Update im Jahr 2006) oder rufen Sie es modern umDependencies
.quelle
dumpbin
über Abhängigkeitsläufer. msdn.microsoft.com/en-us/library/756as972.aspx | stackoverflow.com/a/28304716/3543437dumpbin
Hier können die Tools von Visual Studio (Ordner VC \ bin) helfen:quelle
dumpbin.exe
ist sehr nützlich, um herauszufinden/dependents
und/imports
. Sie können es auch auf anderen Computern verwenden, wenn Sie es kopierenlink.exe
und sicherstellen, dass die entsprechende x86 Visual C ++ Runtime Redistributable (msvcr120.dll
für Visual Studio 2013) auf dem Zielcomputer verfügbar ist. Einige Optionen haben zusätzliche Abhängigkeiten. - Übrigens haben sie den Optionsnamen vermasselt, es hätte/PREREQUISITES
eher sein sollen, als dass/DEPENDENTS
sie Latein gelernt haben sollten.Ich kann Linux-Fans eine interessante Lösung empfehlen. Nachdem ich diese Lösung untersucht habe, habe ich von DependencyWalker zu dieser gewechselt.
Sie können Ihren Favoriten
ldd
über Windows verwendenexe
,dll
.Dazu müssen Sie Cygwin (Grundinstallation, ohne zusätzliche Pakete erforderlich) unter Windows installieren und dann einfach starten
Cygwin Terminal
. Jetzt können Sie Ihre bevorzugten Linux-Befehle ausführen, darunter:UPD: Sie können es
ldd
auch über das Git Bash Terminal unter Windows verwenden . Sie müssen cygwin nicht installieren, falls Sie git bereits installiert haben.quelle
$ ldd ./Debug/helloworld.exe ??? => ??? (0x77d60000)
. Der Utility-Dumpbin zeigt alle Abhängigkeiten korrekt an.Ermitteln Sie den vollständigen Dateipfad zu der Assembly, mit der Sie arbeiten möchten
Drücken Sie die Starttaste und geben Sie "dev" ein. Starten Sie das Programm "Developer Command Prompt for VS 2017".
Geben Sie im folgenden Fenster ein
dumpbin /dependents [path]
, wo[path]
sich der Pfad befindet, den Sie in Schritt 1 ermittelt habenDrücken Sie die Eingabetaste
Bam, du hast deine Abhängigkeitsinformationen. Das Fenster sollte folgendermaßen aussehen:
Update für VS 2019: Sie benötigen dieses Paket in Ihrer VS-Installation:
quelle
quelle
depends
unterstützt keine API-Sets und ist daher für Win7 + nutzlos.Am sichersten ist es, eine saubere virtuelle Maschine zu haben, auf der Sie Ihr Programm testen können. Stellen Sie bei jeder Version, die Sie testen möchten, den ursprünglichen Bereinigungswert der VM wieder her. Installieren Sie dann Ihr Programm mithilfe des Setups und prüfen Sie, ob es funktioniert.
DLL-Probleme haben unterschiedliche Gesichter. Wenn Sie Visual Studio verwenden und eine dynamische Verknüpfung zur CRT herstellen, müssen Sie die CRT-DLLs verteilen. Aktualisieren Sie Ihren VS, und Sie müssen eine andere Version der CRT verteilen. Es reicht nicht aus, nur die Abhängigkeiten zu überprüfen, da Sie diese möglicherweise verpassen. Eine vollständige Installation auf einem sauberen Computer ist die einzig sichere Lösung, IMO.
Wenn Sie keine vollständige Testumgebung einrichten möchten und Windows 7 verwenden möchten, können Sie den XP-Modus als ersten sauberen Computer und XP-More zum Duplizieren der VM verwenden.
quelle
Auf Ihrem Entwicklungscomputer können Sie das Programm ausführen und den Sysinternals Process Explorer ausführen . Im unteren Bereich werden die geladenen DLLs und die aktuellen Pfade zu diesen angezeigt, was aus mehreren Gründen nützlich ist. Wenn Sie Ihr Bereitstellungspaket ausführen, wird angezeigt, auf welche DLLs im falschen Pfad verwiesen wird (dh welche nicht korrekt gepackt wurden).
Derzeit verwendet unser Unternehmen Visual Studio Installer-Projekte, um den Abhängigkeitsbaum zu durchsuchen und das Programm als lose Dateien auszugeben. In VS2013 ist dies jetzt eine Erweiterung: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d . Wir packen diese losen Dateien dann in ein umfassenderes Installationsprogramm, aber zumindest dieses Setup projiziert alle Punktnetzabhängigkeiten und legt sie an einer Stelle ab und warnt Sie, wenn Dinge fehlen.
quelle
In der Vergangenheit (dh in WinXP-Tagen) war ich immer von DLL Dependency Walker (abhängige.exe) abhängig, aber manchmal kann ich die DLL-Probleme immer noch nicht ermitteln. Im Idealfall möchten wir dies vor der Laufzeit durch Inspektionen herausfinden. Wenn dies jedoch nicht behoben werden kann (oder zu viel Zeit in Anspruch nimmt), können Sie versuchen, den "Loader-Snap" wie unter http://blogs.msdn.com/ beschrieben zu aktivieren. b / junfeng / archive / 2006/11/20 / debugging-loadlibrary-failed.aspx und https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs.85).aspx und kurz erwähnt LoadLibrary schlägt fehl; GetLastError keine Hilfe
WARNUNG: Ich habe in der Vergangenheit mein Windows durcheinander gebracht und mit Gflag herumgespielt, sodass es auf die Knie kriecht. Sie wurden gewarnt.
Hinweis: "Loader-Snap" ist pro Prozess, sodass die UI-Aktivierung nicht aktiviert bleibt (verwenden Sie cdb oder glfags -i).
quelle
NDepend wurde bereits von Jesse erwähnt (wenn Sie .NET-Code analysieren), aber lassen Sie uns genau erklären, wie es helfen kann.
Im Bereich "NDepend-Projekteigenschaften" können Sie definieren, welche Anwendungsassemblys analysiert werden sollen (grün). NDepend leitet dann Assemblys von Drittanbietern ab, die von Anwendungsassemblierungen verwendet werden (blau). Eine Liste der Verzeichnisse zum Durchsuchen von Anwendungen und Assemblys von Drittanbietern wird bereitgestellt.
Wenn in diesen Verzeichnissen keine Assembly eines Drittanbieters gefunden wird, befindet sie sich im Fehlermodus. Wenn ich beispielsweise das .NET Fx-Verzeichnis entferne,
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
kann ich feststellen, dass .NET Fx-Assemblys von Drittanbietern nicht aufgelöst werden:Haftungsausschluss: Ich arbeite für NDepend
quelle
Bitte suchen Sie "abhängige.exe" in Google, es ist ein winziges Dienstprogramm, um dies zu handhaben.
quelle
Wenn Sie den Quellcode haben, können Sie ndepend verwenden.
http://www.ndepend.com/
Es ist teuer und bietet viel mehr als nur die Analyse von Abhängigkeiten, sodass es für das, wonach Sie suchen, möglicherweise übertrieben ist.
quelle
LoadLibraryEx
LoadLibraryEx
hilft da nicht.Das pedeps-Projekt ( https://github.com/brechtsanders/pedeps ) verfügt über ein Befehlszeilentool (copypedeps) zum Kopieren Ihrer EXE- (oder DLL-) Datei (en) zusammen mit allen Dateien, von denen es abhängt. Wenn Sie dies auf dem System tun, auf dem die Anwendung funktioniert, sollten Sie in der Lage sein, sie mit allen abhängigen DLLs zu versenden.
quelle
Weitere Informationen finden Sie unter dem folgenden Link im SysInternal-Toolkit von Microsoft. https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
Gehen Sie zum Download-Ordner und öffnen Sie "Procexp64.exe" als Administratorrechte. Öffnen Sie die Option Suchmenü> "Handle oder DLL suchen" oder die Tastenkombination Strg + F.
quelle
Probieren Sie JetBrains dotPeek aus . Es ist kostenlos.
quelle