2017-03-10 2 views
0

Je souhaite utiliser le programme d'amorçage WiX burn pour télécharger et installer automatiquement le package vcruntime140 (Visual C++ Redistributable pour Visual Studio 2015) si nécessaire.Téléchargement Web de vcruntime140 avec wix burn

Il est trivialement facile à faire pour les cadres .NET:

<Chain> 
    <PackageGroupRef Id="NetFx452Web"/> 
    ... 
</Chain> 

, mais je ne peux pas trouver un équivalent pour les forfaits vcruntime. (Est-ce parce qu'il n'y en a pas, ou est-ce que je ne fais que taper les mauvais mots-clés dans Google?)

Juste pour être clair: Je ne veux pas inclure le paquet avec mon installateur. Ce doit être un téléchargement web.

Répondre

2

Il n'y a pas de PackageGroupRef pour le redist comme pour .net.

Mais il y a 3 autres options:

  1. Ajouter un Redist exe dans votre chaîne. (Pas bon pour vous)
  2. Utilisez un redist c++ merge module dans l'un de vos msi.
  3. Essayez d'écrire le vôtre web download en tant que .net. Voici un exemple du téléchargement web .net. Le dossier complet se trouve dans le code source de Wix par le nom "NetFx46.wxs"
<Fragment> 
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" /> 
<Property Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Secure="yes" /> 
<SetProperty Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Value="1" After="AppSearch"> 
    WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx46MinRelease)" 
</SetProperty> 
</Fragment> 

<Fragment> 
<util:RegistrySearchRef Id="NETFRAMEWORK45"/> 
<WixVariable Id="WixMbaPrereqPackageId" Value="NetFx46Web" /> 
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="http://go.microsoft.com/fwlink/?LinkID=558772" /> 
<WixVariable Id="NetFx46WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx46MinRelease)" Overridable="yes" /> 
<WixVariable Id="NetFx46WebInstallCondition" Value="" Overridable="yes" /> 
<WixVariable Id="NetFx46WebPackageDirectory" Value="redist\" Overridable="yes" /> 

<PackageGroup Id="NetFx46Web"> 
    <ExePackage 
     InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx46FullLog].html&quot;" 
     RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx46FullLog].html&quot;" 
     UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx46FullLog].html&quot;" 
     PerMachine="yes" 
     DetectCondition="!(wix.NetFx46WebDetectCondition)" 
     InstallCondition="!(wix.NetFx46WebInstallCondition)" 
     Id="NetFx46Web" 
     Vital="yes" 
     Permanent="yes" 
     Protocol="netfx4" 
     DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=560371" 
     LogPathVariable="NetFx46FullLog" 
     Compressed="no" 
     Name="!(wix.NetFx46WebPackageDirectory)NDP46-KB3045557-x86-x64-AllOS-ENU.exe"> 
    <RemotePayload 
     CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0" 
     CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC" 
     Description="Microsoft .NET Framework 4.6 Setup" 
     Hash="480CA134B9E3F2437DF10719D5A8C77DDEC0A4F1" 
     ProductName="Microsoft .NET Framework 4.6" 
     Size="1497400" 
     Version="4.6.81.0" /> 
    </ExePackage> 
</PackageGroup> 

+0

Juste pour noter que [Microsoft ne recommande plus l'utilisation de modules de fusion pour l'environnement d'exécution v140] (https://msdn.microsoft.com/en-us/library/ms235290.aspx). –

1

Pour la petite histoire, voici ma solution finale.

Cliquez avec le bouton droit sur les références de projet bootstrapper dans Visual Studio et ajoutez une référence à WixUtilExtension.

Ajoutez xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" comme attribut à l'élément de niveau supérieur Wix.

Ajouter à l'élément <Chain>:

<PackageGroupRef Id="vcredist_vc140"/> 

Ajouter comme enfant de l'élément <Wix>:

<Fragment> 
    <!-- vcredist 2015 x86 --> 
    <util:ProductSearch 
     Id="VCREDIST_140_x86" 
     UpgradeCode="65E5BD06-6392-3027-8C26-853107D3CF1A" 
     Result="version" 
     Variable="VCREDIST_140_x86"/> 
    <PackageGroup Id="vcredist_vc140"> 
    <ExePackage 
     Id="vc140" 
     Cache="yes" 
     PerMachine="yes" 
     Permanent="yes" 
     Vital="yes" 
     Compressed="no" 
     DownloadUrl="http://go.microsoft.com/fwlink/?LinkID=615459" 
     Name="vcredist_vc140" 
     InstallCommand="/quiet /norestart" 
     DetectCondition="(VCREIST_140_x86 &gt;= v14.0.24215)"> 
     <RemotePayload 
      Description="Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215" 
      ProductName="Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215" 
      Size="14456872" 
      Version="14.0.24215.1" 
      Hash="72211BD2E7DFC91EA7C8FAC549C49C0543BA791B" /> 
    </ExePackage> 
    </PackageGroup> 
</Fragment> 

UpgradeCode est venu de this answer et est spécifique à v14.0.24215 du programme d'installation de vcredist. C'est ainsi que le bootstrappeur décide s'il est déjà installé.

Compressed="no" indique au programme d'installation de ne pas inclure le fichier dans le programme d'installation lui-même (puisque nous voulons le télécharger sur le Web).

DownloadUrl est une URL directe du programme d'installation téléchargeable de this answer.

RemotePayload Description est le texte de la ressource Description de l'installateur et ProductName. (Il semble que le texte et non doit correspondre au texte dans les ressources.) ProductName est la description affichée dans la boîte de dialogue de progression du programme d'amorçage.

Size est la taille en octets. Hash est trouvé avec la commande Powershell get-filehash -algorithm SHA1 .\vc_redist.x86.exe.

J'espère que cela aide quelqu'un.