web-dev-qa-db-fra.com

Redistribuables pour le déploiement de C++ exe développé avec Visual Studio 2015 sous Windows 7

J'ai développé une application C++ 32 bits à l'aide de Visual Studio 2015 (sous Windows 10). Je souhaite le déployer sur des machines exécutant Windows 7 et versions ultérieures.

J'ai mis en place un programme d'installation WiX et inclus le module de fusion redistribuable VC++ comme décrit ici . Le module de fusion que j'ai inclus était C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC140_CRT_x86.msm.

Ce programme d’installation semble fonctionner correctement, mais sous Windows 7, le programme installé ne s’exécutera pas. Il se plaint du api-ms-win-crt-runtime-l1-1-0.dll manquant. 

En recherchant, je soupçonne qu'il peut y avoir des fichiers supplémentaires dans le paquet redistribuable vc_redist.x86.exe à partir de ici , mais la documentation WiX me dit d’utiliser un msm plutôt qu’un fichier exe. 

Il est également possible que l'installation du module de fusion ait échoué. Je n'ai vu aucune erreur, mais je ne l'ai pas réexécuté avec les journaux activés pour vérifier cette possibilité.

Une autre option peut être d'utiliser burn mais je ne suis pas familier avec cet outil; J'irai dans cette voie si c'est la bonne mais je préférerais rester avec MSI si possible.

15
Peter Hull

Les redistribuables d'exécution de VC++ sont devenus plus compliqués dans Visual Studio 2015. Voir le blog de l'équipe VC à propos du CRT universel. Fondamentalement, le module de fusion est insuffisant:

Il n'y aura pas de module de fusion pour Universal CRT. Si vous utilisez actuellement les modules de fusion CRT et souhaitez toujours déployer les bibliothèques Visual C++ de manière centralisée, nous vous recommandons de passer au package Windows Update mentionné ci-dessus ou à VCRedist. Vous pouvez également choisir de vous lier statiquement aux bibliothèques Universal CRT et Visual C++.

10
Bob Arnson

Nous avons rencontré le problème que le package MSI n'a pas pu installer le redistribuable avec MSI Error 1618: 'Another installation is already in progress' during installation/uninstallation. Nous avons installé le redistribuable 2015 avec WIX à l'aide d'un Bootstraper. Par exemple:

<Chain>
  <!-- Microsoft Visual C++ 2015 x86 libraries -->
  <ExePackage Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
     SourceFile="EXAMPLE_PATH\vc_redist.x86.exe" InstallCommand="/install /passive /norestart">
  </ExePackage>

  <MsiPackage Id="MainPackage" SourceFile="YOUR_MSI_PACKAGE.msi" DisplayInternalUI="no" Compressed="yes" Vital="yes"/>
</Chain>

2

Il est à noter qu'il est maintenant possible de distribuer les DLL Universal C Runtime avec votre application. Le message de blog MSDN décrit les étapes suivantes:

  1. Installez le SDK Windows 10
  2. Accédez à C:\Program Files (x86)\Windows Kits\10\Redist\ucrt et recherchez les DLL de la plate-forme que vous ciblez.
  3. Copiez-les dans le répertoire du programme de votre application.

Ils ne sont pas gros. Environ 2 mégaoctets au total.

J'ai fini par utiliser cette technique parce que:

  • Cela ne nécessite pas que je crée un paquet WiX séparé, puis les bootstrap;
  • Il ne nécessite pas l'utilisateur d'exécuter des programmes d'installation supplémentaires

Je ne peux pas dire si cela fonctionnerait sur tous les ordinateurs, mais cela fonctionne sur ceux que j'ai testés.

1
Owen