web-dev-qa-db-fra.com

problèmes avec l'exécution du fichier exe construit avec Visual Studio sur un autre ordinateur

J'ai créé une application client-serveur en C++ à l'aide de Visual Studio.

Maintenant, je veux exécuter le fichier exe client sur un autre ordinateur (qui n'a pas installé Visual Studio) mais lorsque j'essaie d'exécuter le fichier exe, il donne le message d'erreur suivant:

Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte. Réinstaller l'application peut résoudre ce problème.

Comment puis-je exécuter le fichier exe sans rien installer sur l'ordinateur?

20
Karen123456

J'ai déployé mon programme en version au lieu de déboguer et l'exe fonctionne maintenant sur l'autre ordinateur

4
Karen123456

Les applications créées avec Visual Studio dépendent de Visual C++ Redistibutable (VCRedist). Lorsque le programme est lié dynamiquement, vos fichiers binaires auront besoin de MSVCR**.dll (Microsoft C Runtime Library).

Sur MSDN, il y a un article de Nice appelé Redistributing Visual C++ Files (pour Visual Studio 2008) , qui indique qu'il y a Erreurs potentielles d'exécution au cas où = la bibliothèque Visual C++ requise n'est pas installée:

vous pouvez obtenir l'un des messages d'erreur suivants selon la version de Windows sur laquelle vous essayez d'exécuter votre application:

  • L'application n'a pas pu s'initialiser correctement (0xc0000135).
  • Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte. La réinstallation de l'application peut résoudre ce problème.
  • Le système ne peut pas exécuter le programme spécifié.
  • La solution la plus simple possible consiste à remplacer la liaison dynamique des bibliothèques d'exécution par une liaison statique. Allez dans les propriétés du projet et sous C/C++> Génération de code vous trouverez l'option Runtime Library. Vous devez le changer de Multi-threaded DLL (/MD) à Multi-threaded (/MT).
  • Une autre solution possible consiste à s'assurer que la bonne version du package redistribuable Microsoft VC++ est installée sur la machine cible.

Mais votre application peut également dépendre d'autres DLL. Si vous voulez savoir quelles sont les dépendances de votre programme, il existe un excellent utilitaire appelé Dependency Walker , qui vous aidera dans cette situation et dans bien d'autres situations :)

20
LihO

Contexte:

  • Applications C++ Besoin d'assemblys d'exécution (DLL) pour s'exécuter sur n'importe quel ordinateur Windows.
  • Normalement, ces assemblys d'exécution situés dans le répertoire C:\Windows\Winsxs.
  • Par défaut, tous les systèmes d'exploitation Windows sont fournis avec plusieurs assemblages d'exécution.
  • Mais si votre application a été développée dans une version plus récente de l'environnement d'assemblage au moment de l'exécution, l'ordinateur cible doit également disposer de la même version d'exécution.
  • Lorsque vous installez Visual Studio, la plupart des versions les plus récentes des assemblys d'exécution arrivent sur votre ordinateur.

Soloution: Enfin, de toute façon, l'ordinateur cible devrait avoir les assemblages d'exécution exacts. Il y a peu de façons de le faire (pour plus de détails, recherchez dans Google chacun).

  1. Liez statiquement les assemblys d'exécution avec votre application (gênant pour les grandes applications).
  2. Installez l'environnement de redistribution C++ sur l'ordinateur cible (le plus simple).
  3. Création d'un projet d'installation pour déployer l'exécution sur l'ordinateur cible lors de l'installation de l'application. (Pas mal)
  4. Déployer des assemblys d'exécution en tant qu'assemblages privés (professionnels) voir ici pour plus de détails

Conditions:

  • Vous ne devez pas utiliser .NET Framework dans votre application.
  • Vous ne devez pas utiliser la prise en charge d'exécution en langage commun pour votre application
11

Je n'ai jamais vu cette erreur spécifique auparavant, il s'agit généralement d'une erreur autour d'un DLL (Windows redistribuable) manquant. En supposant qu'il n'y a pas réellement de problème avec la configuration, vous avez deux choix:

1) Modifiez le mode de compilation de Multithreaded DLL à Multithreaded. Cela peut être fait à partir de la section C++ des propriétés du projet sous génération de code. En mode multithread, votre binaire sera lié statiquement aux fenêtres redistribuables. C'est probablement ce que tu veux.

2) Installez les fenêtres redistribuables sur la machine cible. Ce n'est probablement pas ok b/c vous déclarez que vous ne voulez rien installer sur la machine cible.

Un avertissement concernant l'option 1, différentes versions de Windows ont différentes versions du redistribuable. Il est possible de rencontrer un environnement hautement spécialisé dans lequel un programme lié statiquement ne se comportera pas comme prévu.

4
john.pavan

Il semble que vous manquiez des fichiers DLL. Assurez-vous de copier les DLL appropriées avec exe.

2
mag_zbc