Parfois, lorsque je fais un petit projet, je ne suis pas assez prudent et j'ajoute accidentellement une dépendance pour une DLL dont je ne suis pas au courant. Lorsque j'expédie ce programme à un ami ou à d'autres personnes, "il ne fonctionne pas" car "une DLL" est manquante. C'est bien sûr parce que le programme peut trouver la DLL sur mon système, mais pas sur le leur.
Existe-t-il un moyen d'analyser un exécutable pour les dépendances DLL ou d'exécuter le programme dans un environnement «propre» sans DLL pour tester pour éviter ces situations de désordre ?
windows
dll
dependencies
orlp
la source
la source
dumpbin /dependents <program>
. Je suppose que la liste sera plus pertinente que la liste de toutes les DLL dans%SYSTEM%
ou%SYSTEM32%
. Consultez également les options DUMPBIN sur MSDN.Réponses:
Essayez
Dependency Walker
(dernière mise à jour en 2006) ou une réécriture moderne de celui-ci appeléeDependencies
.la source
dumpbin
sur dépendance marcheur. msdn.microsoft.com/en-us/library/756as972.aspx | stackoverflow.com/a/28304716/3543437dumpbin
à partir des outils Visual Studio (dossier VC \ bin) peut vous aider ici:la source
dumpbin.exe
est très utile pour comprendre/dependents
et/imports
. Vous pouvez également l'utiliser sur d'autres ordinateurs si vous copiezlink.exe
avec lui et assurez-vous que le redistribuable x86 Visual C ++ Runtime correspondant (msvcr120.dll
pour Visual Studio 2013) est disponible sur l' ordinateur cible. Certaines options ont des dépendances supplémentaires. - Au fait, ils ont foiré le nom de l'option, cela aurait dû être/PREREQUISITES
plutôt que/DEPENDENTS
, ils auraient dû étudier le latin.Je peux recommander une solution intéressante pour les fans de Linux. Après avoir exploré cette solution, je suis passé de DependencyWalker à celui-ci.
Vous pouvez utiliser votre favori
ldd
sur Windows liéeexe
,dll
.Pour ce faire, vous devez installer Cygwin (installation de base, sans packages supplémentaires requis) sur votre Windows, puis démarrer
Cygwin Terminal
. Vous pouvez maintenant exécuter vos commandes Linux préférées, notamment:UPD: Vous pouvez
ldd
également utiliser via le terminal git bash sous Windows . Pas besoin d'installer cygwin au cas où vous auriez déjà installé git.la source
$ ldd ./Debug/helloworld.exe ??? => ??? (0x77d60000)
. L'utilitaire dumpbin affiche correctement toutes les dépendances.Déterminez le chemin complet du fichier vers l'assembly avec lequel vous essayez de travailler
Appuyez sur le bouton de démarrage, tapez "dev". Lancez le programme appelé «Invite de commandes du développeur pour VS 2017»
Dans la fenêtre qui s'ouvre, tapez
dumpbin /dependents [path]
, où se[path]
trouve le chemin que vous avez trouvé à l'étape 1appuyez sur la touche Entrée
Bam, vous avez vos informations de dépendance. La fenêtre devrait ressembler à ceci:
Mise à jour pour VS 2019: vous avez besoin de ce package dans votre installation VS:
la source
la source
depends
ne prend pas en charge les ensembles d'API, il est donc inutile pour Win7 +.La chose la plus sûre est d'avoir une machine virtuelle propre, sur laquelle vous pouvez tester votre programme. Sur chaque version que vous souhaitez tester, restaurez la VM à sa valeur de nettoyage initiale. Ensuite, installez votre programme en utilisant sa configuration et voyez s'il fonctionne.
Les problèmes de DLL ont des visages différents. Si vous utilisez Visual Studio et créez un lien dynamique vers le CRT, vous devez distribuer les DLL CRT. Mettez à jour votre VS et vous devez distribuer une autre version du CRT. Il ne suffit pas de vérifier les dépendances, car vous risquez de les manquer. Faire une installation complète sur une machine propre est la seule solution sûre, IMO.
Si vous ne souhaitez pas configurer un environnement de test complet et disposer de Windows 7, vous pouvez utiliser XP-Mode comme machine propre initiale et XP-More pour dupliquer la machine virtuelle.
la source
Sur votre machine de développement, vous pouvez exécuter le programme et exécuter Sysinternals Process Explorer . Dans le volet inférieur, il vous montrera les DLL chargées et leurs chemins d'accès actuels, ce qui est pratique pour un certain nombre de raisons. Si vous exécutez votre package de déploiement, cela révélera quelles DLL sont référencées dans le mauvais chemin (c'est-à-dire qu'elles n'ont pas été correctement empaquetées).
Actuellement, notre société utilise des projets Visual Studio Installer pour parcourir l'arborescence des dépendances et générer le programme sous forme de fichiers libres. Dans VS2013, il s'agit désormais d'une extension: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d . Nous conditionnons ensuite ces fichiers en vrac dans un programme d'installation plus complet, mais au moins ce programme d'installation projette toutes les dépendances dot net et les dépose au même endroit et vous avertit lorsque des éléments manquent.
la source
Dans le passé (c'est-à-dire les jours de WinXP), je dépendais / dépendais de DLL Dependency Walker (depend.exe) mais il y a des moments où je ne suis toujours pas en mesure de déterminer le (s) problème (s) DLL. Idéalement, nous aimerions le savoir avant l'exécution par des inspections, mais si cela ne résout pas le problème (ou prend trop de temps), vous pouvez essayer d'activer le "loader snap" comme décrit sur http://blogs.msdn.com/ b / junfeng / archive / 2006/11/20 / debugging-loadlibrary-failures.aspx et https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs.85).aspx et a brièvement mentionné l' échec de LoadLibrary; GetLastError aucune aide
AVERTISSEMENT: j'ai gâché mon Windows dans le passé en train de jouer avec gflag le faisant ramper à genoux, vous avez été prévenu.
Remarque: "Loader snap" est par processus, donc l'activation de l'interface utilisateur ne reste pas cochée (utilisez cdb ou glfags -i)
la source
NDepend a déjà été mentionné par Jesse (si vous analysez le code .NET) mais expliquons exactement comment cela peut aider.
Dans le panneau Propriétés du projet NDepend, vous pouvez définir quels sont les assemblys d'application à analyser (en vert) et NDepend déduira les assemblys tiers utilisés par ceux d'application (en bleu). Une liste de répertoires dans lesquels rechercher des assemblys d'applications et de tiers est fournie.
Si un assembly tiers n'est pas trouvé dans ces répertoires, il sera en mode erreur. Par exemple, si je supprime le répertoire .NET Fx,
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
je peux voir que les assemblys tiers .NET Fx ne sont pas résolus:Avis de non-responsabilité: je travaille pour NDepend
la source
Veuillez rechercher "depend.exe" dans google, c'est un petit utilitaire pour gérer cela.
la source
Si vous avez le code source, vous pouvez utiliser ndepend.
http://www.ndepend.com/
C'est cher et fait beaucoup plus que d'analyser les dépendances, il peut donc être excessif pour ce que vous recherchez.
la source
LoadLibraryEx
LoadLibraryEx
n'aide pas là.Le projet pedeps ( https://github.com/brechtsanders/pedeps ) dispose d'un outil de ligne de commande (copypedeps) pour copier votre (vos) fichier (s) .exe (ou .dll) avec tous les fichiers dont il dépend. Si vous faites cela sur le système où l'application fonctionne, vous devriez être en mesure de l'expédier avec toutes ses DLL de dépendance.
la source
Veuillez vous référer à la boîte à outils SysInternal de Microsoft à partir du lien ci-dessous, https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
Accédez au dossier de téléchargement, ouvrez "Procexp64.exe" en tant que privilège d'administrateur. Ouvrez le menu Rechercher-> option "Rechercher une poignée ou une DLL" ou un raccourci Ctrl + F.
la source
Essayez JetBrains dotPeek . C'est gratuit.
la source