Posts Tagged ‘DLL’

DependencyWalker, explorer les dépendances d’une application

17 octobre 2011

Bien souvent, lorsque l’on développer une application, tout se passe bien jusqu’au moment ou l’on souhaite la faire fonctionner sur une autre machine. Bien souvent, lors de cette étape, on fait le douloureux constat que l’application ne démarre même bien, en général, on obtient juste un message indiquant qu’il y a un problème et que l’application ne peut démarrer, avec pour seule suggestion de remède une réinstallation, ce qui bien sur est inutile.

Dans la plupart des cas, on est face à un problème de dépendances avec des bibliothèques présentes sur la machine de développement (installées au bon endroit lors de l’installation des outils de développement), et absentes des systèmes « classiques ».

Il est parfois aisé de savoir quelles sont les librairies utilisées, en fonction des SDK et autres Framwork utilisés, mais parfois, ça n’est pas si simple.

Dans ces cas, il existe des logiciels capables d’analyser un fichier binaire pour en retirer les dépendances. Dependency Walker fait parti de ceux-ci.

Fenêtre principale de Dependency Walker

Fenêtre principale de Dependency Walker

La simple ouverture d’un exécutable dans ce logiciel vous permettra de voir instantanément de quelles DLL à besoin le logiciel pour fonctionner. Une simple recherche sur la machine de dev devrait vous permettre de mettre la main sur la DLL manquante afin de la joindre à votre programme pour que tout rentre dans l’ordre.

Un certain travail de tri et de sélection des informations restera cependant nécessaire car comme le montre la capture ci-dessus, l’intégralité des DLL et dépendances sont affichées, il faudra donc différencier les DLL systèmes (toujours présentes sous Windows et qu’il ne sera donc pas nécessaire d’importer) des DLL applicatives qu’il faudra fournir.

InnoSetup : ajouter les DLL Visual C++

14 octobre 2011

Si vous développez à l’aide de Microsoft Visual Studio, vos programmes nécessitent, pour fonctionner sur une machine quelconque, de diposer des bibliothèques suivantes (DLL de VC++ 2008) :

  • mfc90.dll
  • msvcr90.dll
  • msvcp90.dll
  • atl90.dll
  • vcomp.dll
L’absence des ces librairies est un cas fréquent de non fonctionnement des programmes développés par vos soins, le syptôme est alors l’apparition d’un message du type : « Cette application n’a pas pu démarrer car la configuration de l’application est incorrecte. Réinstaller l’application pourrait résoudre ce problème.« .

 

La solution est d’installer le package de DLL « Microsoft Visual C++ 2008 Redistribuable Package » (téléchargeable sur le site de Microsoft : vcredist_x86.exe ou vcredist_x64.exe pour la version 64 bits).
Mais voila, si vous distribuez vos applications avec un installeur comme Inno Setup, cela impose à vos utilisateurs de télécharger ce package de DLL en sus, avec le risque qu’ils passent à coté et qu’il ne parviennent donc pas à lancer votre application.
La solution la plus simple est donc d’intégrer vcredist dans l’installeur InnoSetup de façon à ce que son installation soit automatique et transparente pour vos utilisateurs. Voici comment procéder :
  1. Téléchargez vcredist_x86.exe sur le site de Microsoft (voir lien plus haut) et enregistrez le dans un sous dossier ./bin/ de votre projet
  2. Ouvrez votre projet Inno Setup (je suppose ici que celui-ci est d’hors et déjà créé et que l’emplacement des autres fichiers de votre projet sont déjà renseignés)
  3. Dans la section [files] de votre projet, ajoutez ceci :
    Source: "{src}binvcredist_x86.exe"; DestDir: "{app}bin"; Flags: deleteafterinstall
  4. Dans la section [Run], ajoutez :
    Filename: "{app}binvcredist_x86.exe"; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: "{app}bin"; StatusMsg: Installing VCREDIST...
Il faudra bien sur adapter ces commandes si vous intégrez la version 64 bits.
Vous devriez également pouvoir inclure les 2 versions (32 et 64 bits) en jouant avec les options et conditions disponibles dans InnoSetup.

 

Grâce à cette technique, l’installation se fera de façon totallement transparente, l’utilisateur n’ayant même pas besoin de valider les différentes étapes de l’installer du package Visual Studio VC++ Redistribuable (il voit juste une barre de progression qui se remplit sans poser de questions).

 

Note : ce billet traite plus particulièrement de la version 2008 de Visual Studio (celle que j’utilise), mais cette astuce est transposable telle qu’elle pour les autres versions de VS (je pense notamment aux versions 2005 et 2010), il suffit de télécharger les pack vcredist correspondants à ces versions sur le site de Microsoft.