Question

Mon programme C (++), écrit et compilé à l'aide de Visual C (++) / Visual Studio, fonctionne correctement sur mon propre ordinateur, mais refuse de s'exécuter sur un autre ordinateur. Le message d'erreur que je reçois est "Cette application n'a pas pu démarrer car sa configuration est incorrecte. La réinstallation de l’application pourrait résoudre ce problème. & Quot;

Était-ce utile?

La solution

Si vous écrivez un programme C ++, il est lié dynamiquement à la bibliothèque d'exécution C ou à la bibliothèque CRT. Cette bibliothèque contient votre printf, votre malloc, votre strtok, etc. La bibliothèque est contenue dans le fichier appelé MSVCR80.DLL. Ce fichier n’est pas installé par défaut sur un système Windows. Par conséquent, l’application ne peut pas être exécutée.

La solution? Installez la DLL sur la machine cible via VCREDIST.EXE (le package redistribuable Visual C ++) ou créez un lien statique vers le CRT (branchez le code des fonctions utilisées directement dans votre fichier EXE).

La distribution et l’installation de VCREDIST avec une application simple est une tâche difficile, j’ai donc opté pour la deuxième option: la liaison statique. C'est très simple: allez dans les propriétés de votre projet, déployez C / C ++, cliquez sur Génération de code et définissez la bibliothèque d'exécution sur l'une des options non DLL. C'est tout ce qu'il y a à faire.

Autres conseils

Le problème ici est une dépendance de DLL manquante, telle que le CRT (C Runtime Library). Dependency Walker (depend.exe) est un bon outil pour diagnostiquer ce type de problème. Vous pouvez le trouver ici:

http://www.dependencywalker.com/

Vous exécuterez ce programme sur l’ordinateur qui génère le message d’erreur que vous avez publié et vous en servirez pour ouvrir le fichier exe générant cette erreur. Dependency Walker indiquera rapidement et graphiquement toutes les DLL requises mais non disponibles sur la machine.

Il est fort probable que vous manquiez les bibliothèques d'exécution de Visual Studio (CRT, entre autres), vous pouvez vous en débarrasser (lien statique) ou installer les packages de redistribution VC sur l'ordinateur cible.

Selon la version de Visual C ++ que vous utilisez, vous devez installer différents packages:

Visual C ++ 2005

Visual C ++ 2005 SP <1 / a>

Visual C ++ 2008

Avertissement : ces packages ne contiennent que les versions finales des bibliothèques. Si vous souhaitez pouvoir distribuer des versions de débogage de votre application, vous devrez vous-même vous occuper de la DLL requise.

Il est beaucoup plus simple de créer un lien statique avec le moteur d'exécution.

c ++ - > Génération de code - > Bibliothèque d'exécution et sélectionnez "multi-threaded / MT"

Cependant, cela rend votre exécutable plus grand de quelques centaines de Ko. Cela peut poser problème si vous installez un grand nombre de petits programmes, car chacun d’eux sera chargé par sa propre copie du moteur d’exécution. La solution consiste à créer un programme d’installation.

Nouveau projet - > " configuration et déploiement " - > "Projet d'installation"

Chargez le résultat de vos projets d'application (défini à l'aide de la version DLL du runtime) dans le projet d'installation et générez-le. La dépendance vis-à-vis de la DLL d'exécution sera remarquée, incluse dans le package d'installation et installée proprement et discrètement à l'emplacement approprié sur la machine cible.

Le package VC Redist correct pour vous fait partie de votre installation de Visual Studio. Pour VC 8, vous pouvez le trouver ici:

\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86

SOLUTION POSSIBLE ........

EDIT: (a supprimé la plupart de mes messages) Pour résumer, j’ai eu des problèmes similaires, en obtenant le message "Configuration de l’application incorrecte". messages, etc. etc. Depends.exe ne faisait que rechercher les problèmes possibles de ieshims.dll et wer.dll, mais ce n'est pas le problème. J'ai fini par utiliser l'option de compilation Multithreaded (/ mt). Ce qui a fonctionné, cependant, en tant que solution réalisable, est la création d’un programme d’installation avec InstallShield. J'ai sélectionné plusieurs modules de fusion dans le constructeur installshield et cela semble avoir résolu mon problème. Les modules sélectionnés étaient: VC ++ 9.0 CRT, VC ++ 9.0 DEBUG CRT et le module de fusion CRT WinSXS MSM. Je suis presque sûr que c'est le module de fusion WinSXS qui l'a corrigé.

DEBUG CRT: J'ai remarqué quelque part que (peu importe les efforts que j'ai déployés et que j'ai échoué jusqu'à présent), ma version de Release dépendait toujours du DEBUG CRT. Si tel est toujours le cas, le module de fusion InstallShield a maintenant placé le dossier DEBUG CRT dans mon dossier WinSXS :) Étant un peu novice avec VC ++, je suppose que cela serait normalement utilisé pour distribuer les versions de débogage de vos programmes à d'autres personnes. Pour vérifier si cela résout mon problème, j'ai supprimé le dossier DEBUG CRT du dossier WinSXS et l'application fonctionnait toujours. (À moins que quelque chose ne tourne toujours en arrière-plan, etc., etc. - je ne suis pas dedans)

Quoi qu'il en soit, cela a fonctionné pour moi sur une machine entièrement mise à jour XP SP3, ainsi que sur une machine VMWare XP SP3 avec les éléments essentiels (.net 3.5 et VC ++ 2008 RTM essentiellement), ainsi que sur la machine XP d'un partenaire. où il ne fonctionnait pas auparavant.

Alors essayez ces choses, vous aurez peut-être un peu de chance.

La première chose que vous devez utiliser

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

ou ajoutez _BIND_TO_CURRENT_VCLIBS_VERSION = 1 aux directives du préprocesseur.

Le problème est lié à la liaison et aux types de manifeste, vous pouvez en trouver plus http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-most-most-recent-visual-studio-libraries/

Ce faisant, votre application s'exécutera avec un plus grand nombre de versions de bibliothèques d'exécution.

Souvent, cette erreur est le résultat d'une tentative d'exécution de la version de débogage d'une application utilisant .NET. Etant donné que le package redistribuable .NET n'inclut pas les versions de débogage des dll installées avec Visual Studio, votre application rencontrera souvent cette erreur lors de son exécution sur un autre ordinateur sur lequel Visual Studio n'est pas installé. Si ce n'est déjà fait, essayez de créer une version finale de votre application et voyez si cela fonctionne.

Notez également que si vous passez en mode exécution statique, vous devrez faire de même pour MFC si votre application utilise MFC. Ces paramètres sont dans les propriétés - > Configuration / Général

J'ai rencontré ce problème et j'ai pu le résoudre très simplement.

Visual studio vous donne la possibilité (par défaut) de créer un manifeste pour chaque construction.

Le manifeste a été placé dans le dossier des versions, mais il s'agissait d'un dossier différent de celui de l'exe.

Même lorsque vous utilisiez les utilitaires d'installation, celui-ci n'était pas empaqueté.

Vous devez rechercher un nom de fichier similaire à myprogram.exe.indermediate.manifest

.

Si cela se trouve dans le même dossier que le fichier exe (et que vous avez toutes les dll), il devrait être exécuté

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top