web-dev-qa-db-fra.com

Puis-je regrouper les DLL redistribuables Visual Studio 2015 C ++ avec mon application?

J'ai créé une application C++ à l'aide de Microsoft Visual Studio 2015 Community Edition. J'utilise Advanced Installer pour m'assurer que Visual C++ Redistributable pour Visual Studio 2015 est une condition préalable.

Cependant, l'installateur du redistribuable n'est pas parfait. Certains de mes utilisateurs ont signalé que le programme d'installation redistribuable se bloque, ou il ne parvient pas à installer quand il le dit, puis les utilisateurs obtiennent l'erreur "Ce programme ne peut pas démarrer car MSVCP140.dll est absent de votre ordinateur".

Selon Microsoft, je peux maintenant empaqueter les DLL redistribuables avec mon application, mais ils ne le recommandent pas:

Pour déployer des fichiers Visual C++ redistribuables, vous pouvez utiliser les packages redistribuables Visual C++ (VCRedist_x86.exe, VCRedist_x64.exe ou VCRedist_arm.exe) inclus dans Visual Studio. ... Il est également possible d'installer directement des DLL Visual C++ redistribuables dans le dossier local de l'application, qui est le dossier qui contient votre fichier d'application exécutable. Pour des raisons de maintenance, nous vous déconseillons d'utiliser cet emplacement d'installation.

Il y a 4 fichiers dans C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT. Cela signifie-t-il que je dois simplement les copier dans le répertoire de mon application pendant le processus d'installation?

  • MyApp.exe
  • concrt140.dll
  • msvcp140.dll
  • vccorlib140.dll
  • vcruntime140.dll

Est-ce correct de faire? Dois-je montrer une licence? Pourquoi plus de gens ne font-ils pas cela au lieu d'exiger une nouvelle préinstallation du redistribuable?

32
a paid nerd

Il y a 4 fichiers dans C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT. Cela signifie-t-il que je dois simplement les copier dans le répertoire de mon application pendant le processus d'installation?

Oui, et le paragraphe que vous avez cité signifie exactement cela.

Est-ce correct de faire? Dois-je montrer une licence? Pourquoi plus de gens ne font-ils pas cela au lieu d'exiger une nouvelle préinstallation du redistribuable?

Techniquement, c'est OK à faire. Si vous voulez être pédant à ce sujet, vous pouvez inclure une note dans le readme ou help/about à l'effet que VC++ 2015 redistributables provided in "local deployment" mode comme explicitement autorisé par Microsoft Déploiement dans Visual C++ .

Quant à savoir pourquoi plus de gens ne le font pas, je suppose que (parmi ceux qui se soucient du tout):

  • pour une application à module unique comme MyApp.exe il est plus facile de le construire avec tout ce qui est lié statiquement pour éliminer les dépendances externes pour commencer;
  • ne pas y compris ces fichiers économise 1+ Mo de la taille de distribution (vraisemblablement téléchargement);
  • en cours d'exécution avec des copies privées du runtime ("local deployment") transfère la responsabilité des mises à jour au responsable, de sorte qu'en cas de correction critique/de sécurité, le package devra être réédité en temps opportun - par opposition à "central deployment" où il serait probablement livré via Windows Update, avec les bons et mauvais que cela pourrait apporter.
16
dxiv

Si vous avez des problèmes avec le programme d'installation des prérequis, vous avez également la possibilité d'installer les redistribuables en tant que modules de fusion. Comme le même article MSDN mentionne:

Une autre option consiste à utiliser des modules de fusion redistribuables (fichiers .msm), qui se trouvent dans Program Files [(x86)]\Common Files\Merge Modules.

L'utilisation de modules de fusion est une option beaucoup plus propre que l'ajout manuel des fichiers. Les fichiers peuvent être supprimés accidentellement par un autre collègue qui ne sait pas pourquoi ils sont là, ou l'un d'eux pourrait ne pas être installé, etc ...

Toutes les éditions de Advanced Installer prennent en charge l'inclusion de modules de fusion, y compris l'édition gratuite.

2
Bogdan Mitrache