Comment vérifier DLL de dépendance?
Parfois, quand je suis en train de faire un petit projet que je ne suis pas assez prudent et accidentellement ajouter une dépendance pour une DLL que je ne suis pas au courant. Quand je bateau de ce programme à un ami ou à d'autres personnes, "il ne fonctionne pas", parce que "certaines DLL" est manquant. C'est bien sûr parce que le programme peut trouver les DLL sur mon système, mais pas sur le leur.
Est-il un moyen pour numériser un fichier exécutable pour la DLL de dépendances ou d'exécuter le programme dans un "nettoyage" de DLL-gratuit environnement de test afin de prévenir ces oups situations?
- Le débogueur affiche tous les fichiers DLL qui est chargée dans la fenêtre de Sortie. Le Debug + Windows + Modules affiche une liste d'entre eux. Assurez-vous que vous pouvez tenir compte de tous les d'entre eux. Et de tester votre programme comme vous tester votre code, utilisez une machine virtuelle.
- Passant: puis-je trouver une liste complète des standard de windows DLL quelque part?
- Yup, en c:\windows\system32 avec un Microsoft le droit d'auteur.
- Passant: je crois que je vais écrire un petit script Python pour extraire les noms alors 🙂 Merci.
- Vous pouvez également essayer de
dumpbin /dependents <program>
. Je devine que la liste sera plus pertinent que d'énumérer toutes les Dll dans%SYSTEM%
ou%SYSTEM32%
. Voir aussi DUMPBIN Options sur le site MSDN.
Vous devez vous connecter pour publier un commentaire.
Essayer dependency walker: http://www.dependencywalker.com/
dumpbin
sur dependency walker. msdn.microsoft.com/en-us/library/756as972.aspx | stackoverflow.com/a/28304716/3543437dumpbin
à partir de Visual Studio tools (VC\bin) peut aider ici:dumpbin.exe
est très utile pour comprendre/dependents
et/imports
. Vous pouvez également l'utiliser sur d'autres machines si vous copiezlink.exe
avec elle et assurez-vous que la correspondante x86 d'Exécution Visual C++ Redistributable (msvcr120.dll
pour Visual Studio 2013) est disponible sur la machine cible. Certaines options ont des dépendances supplémentaires. - Par la voie, ils ont foiré le nom de l'option, il doit avoir été/PREREQUISITES
plutôt que/DEPENDENTS
, ils devraient avoir étudié le Latin.mspdb110.dll not found
, essayez de lancer la version 64 au lieuVC\bin\amd64\dumpbin.exe
avant de ré-installation de Visual Studio 😉dumpbin
répertorie uniquement les Dll, mais ne pas vérifier leur présence.Je peux recommander solution intéressante pour les fans de Linux. Après j'ai exploré cette solution, j'ai basculé de la DependencyWalker à ce.
Vous pouvez utiliser votre favori
ldd
sur Windows liéesexe
,dll
.Pour ce faire, vous devez installer Cygwin (installation de base, sans aucune paquets supplémentaires requis) sur votre Windows et ensuite seulement commencer
Cygwin Terminal
. Vous pouvez maintenant exécuter votre favori commandes Linux, y compris:UPD: Vous pouvez utiliser
ldd
aussi par git bash terminal server sur Windows. Pas besoin d'installer cygwin dans le cas où si vous avez git déjà installé.$ ldd ./Debug/helloworld.exe ??? => ??? (0x77d60000)
. L'utilitaire dumpbin montre toutes les dépendances correctement.Appuyez sur le bouton démarrer, tapez "dev". Lancer le programme appelé "Développeur de l'Invite de Commande pour VS 2017"
Comprendre le chemin d'accès complet à l'assemblée, vous êtes en essayant de travailler avec
Dans la fenêtre qui s'ouvre, tapez
dumpbin /dependents [path]
, où[path]
est le chemin que vous avez trouvé dans l'étape 2appuyez sur la touche entrée
Bam, vous avez vos informations de dépendance. La fenêtre devrait ressembler à ceci:
depends
ne prend pas en charge l'API définit donc il est inutile pour Win7+.La chose la plus sûre est d'avoir une partie de nettoyage de la machine virtuelle, sur lequel vous pouvez tester votre programme. Sur toutes les versions que vous voulez tester, restaurer la VM à sa propre valeur. Installez ensuite votre programme à l'aide de son installation, et voir si cela fonctionne.
Les problèmes de Dll ont des visages différents. Si vous utilisez Visual Studio et d'un lien dynamique vers le CRT, vous devez distribuer le CRT Dll. Mise à jour de votre VS, et vous avez à distribuer une autre version de la CRT. Juste vérifier les dépendances n'est pas suffisant, car vous risquez de manquer de ceux-ci. Faire une installation complète sur un ordinateur propre est la seule solution sûre, de l'OMI.
Si vous ne voulez pas installer un véritable environnement de test et Windows 7, vous pouvez utiliser windows XP Mode comme la première machine propre, et XP Plus pour dupliquer la VM.
Sur votre machine de développement, vous pouvez exécuter le programme et l'exécuter Sysinternals Process Explorer. Dans le volet inférieur, il vous montrera les Dll chargées et les chemins actuels, ce qui est très pratique pour un certain nombre de raisons. Si vous exécutez hors de votre package de déploiement, elles révèlent des Dll qui sont référencés dans le mauvais chemin (c'est à dire n'étaient pas emballés correctement).
Actuellement, notre société utilise Visual Studio Installer projets à pied de l'arbre des dépendances et de sortie que les fichiers du programme. Dans VS2013, c'est maintenant une extension: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d. Nous avons ensuite le paquet de ces lâches fichiers dans une plus complète du programme d'installation, mais au moins que le projet d'installation de tous les dot net, les dépendances et les gouttes en un seul endroit et vous avertit quand les choses sont manquantes.
Dans le passé (c'est à dire WinXP jours), j'ai utilisé dépendre/compter sur DLL Dependency Walker (depends.exe) mais il y a des moments où je ne suis pas encore en mesure de déterminer la DLL en question(s). Idéalement, nous aimerions savoir avant l'exécution, par des inspections, mais si cela ne résout pas (ou prendre trop de temps), vous pouvez essayez d'activer le "chargeur enfichable" tel que 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 brièvement mentionné LoadLibrary échoue; GetLastError aucune aide
AVERTISSEMENT: j'ai foiré mon Windows dans le passé à faire les fous avec gflag faisant ramper à genoux, vous avez été prévenus.
Remarque: "Chargeur enfichable" est par processus pour que l'INTERFACE utilisateur permettent de ne pas rester cochée (utiliser cdb ou glfags -i)
S'il vous plaît chercher "depends.exe" dans google, c'est un tout petit utilitaire pour gérer cela.
Si vous avez le code source, vous pouvez utiliser ndepend.
http://www.ndepend.com/
C'est cher et fait beaucoup plus que de l'analyse des dépendances de sorte qu'il pourrait être exagéré pour ce que vous êtes recherche pour.
LoadLibraryEx
...LoadLibraryEx
n'aide pas là.NDepend a déjà été mentionné par Jesse (si vous l'analysez .NET code), mais permet d'expliquer exactement comment il peut vous aider.
Dans le NDepend Projet panneau Propriétés, vous pouvez définir quels sont les assemblys d'application à analyser (en vert) et NDepend déduit Tiers des assemblées utilisé par ceux (en bleu). Une liste de répertoires où chercher de l'application et de la troisième partie des assemblages est fourni.
Si un tiers de l'assemblée n'est pas trouvé dans ces répertoires, il sera en mode erreur. Par exemple, si je retire la .NET Fx répertoire
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
je le vois .NET Fx tiers assemblées ne sont pas résolus:Disclaimer: je travaille pour NDepend
Veuillez consulter la trousse à outils de Sysinternals à partir de Microsoft lien ci-dessous,
https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
Allez dans le dossier de téléchargement, Ouvrez "Procexp64.exe" en tant qu'administrateur de privilège.
Ouvrir le Menu find (Rechercher)-> "Trouver la Poignée ou de la DLL" option ou sur Ctrl+F façon.
La pedeps projet (https://github.com/brechtsanders/pedeps) est un outil de ligne de commande (copypedeps) pour la copie de votre .exe (ou .dll) fichier(s) avec tous les fichiers dont il dépend.
Si vous faites cela sur le système sur lequel l'application fonctionne, vous devriez être en mesure d'expédier avec tout c'est la dépendance Dll.