web-dev-qa-db-fra.com

Comment détecter si .NET Framework 4.6.1 ou version ultérieure est installé dans WiX?

J'utilise actuellement les balises suivantes dans mon projet d'installation WiX pour vérifier si .NET Framework 4.5 ou supérieur est installé.

<PropertyRef Id="NETFRAMEWORK45" />

<Condition Message="$(var.ProductName) requires .NET Framework 4.5 or higher.">
  <![CDATA[Installed OR (NETFRAMEWORK45 >= "#393295")]]>
</Condition>

Comment puis-je vérifier .NET Framework 4.6.1 et supérieur?

J'utilise WiX 3.10.2.2516.

12
dommer

Que diriez-vous:

<PropertyRef Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" />
<Condition Message="$(var.ProductName) requires .NET Framework 4.6.1 or higher.">
  <![CDATA[Installed OR WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED]]>
</Condition>
20
ProfNimrod

J'ai bien peur que rien de ce qui précède n'ait fonctionné pour moi. Ou peut-être que je n'ai pas très bien compris comment mettre en œuvre les suggestions.

Ce qui a toutefois fonctionné pour moi, c’était mon précédent contrôle relatif à l’exigence .Net Framework 4.5.1, similaire à votre contrôle relatif à la version 4.5.

Remplacez simplement la version par le numéro de version .Net Framework cible par celle requise, disponible ici: https://msdn.Microsoft.com/en-us/library/hh925568(v=vs.110).aspx , a travaillé pour moi.

J'ai fini avec ceci:

<PropertyRef Id="NETFRAMEWORK45"/>
<Condition Message="This application requires .NET Framework 4.6.1. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR (NETFRAMEWORK45 >= "#394254")]]>
</Condition>

P.S. J'ai mis en œuvre le changement aujourd'hui, alors les prochains jours de test me diront si cela fonctionne ou non. Met à jour mon commentaire lorsque j'ai des résultats à partager.

P.P.S. Les tests ont réussi mon côté. Le programme d’installation échoue avec succès sur les environnements sur lesquels .Net Framework 4.6.1 n’est pas installé et s’installe avec succès sur ceux qui possèdent la version . (En outre: Merci @RamenChef, pour avoir modifié mon message: +1 :)

11
Sascha

Update: La version stable actuelle de WiX intègre désormais cette fonctionnalité. cette réponse peut être intéressante si, pour une raison quelconque, vous utilisez une version plus ancienne (par exemple, la version 3.10.3, qui était la plus récente au moment de sa rédaction)


La version actuelle de WiX (3.10.3) ne prend pas en charge cette propriété, pas plus que la version 3.10.x nocturne actuelle (3.10.3.3007). Elle ressemble à la version 3.11.0.960, mais cette version n'est pas compatible t étiqueté comme prêt pour la production, ce n’est donc pas une option pour mon scénario.

Ce que j'ai fini par faire a été de récupérer le source pour NetFx461.wxs ( ici ) et de l'ajouter à mon projet de version 3.10 après l'avoir légèrement modifié (voir ci-dessous). Après cela, j'ai pu utiliser la propriété. Vous pouvez faire des changements similaires pour 4.6.2 si nécessaire.

Voici le fichier:

<?xml version="1.0" encoding="utf-8"?>
<!--
  <copyright file="NetFx461.wxs" company="Outercurve Foundation">
    Copyright (c) 2004, Outercurve Foundation.
    This software is released under Microsoft Reciprocal License (MS-RL).
    The license and further copyright text can be found in the file
    LICENSE.TXT at the root directory of the distribution.
  </copyright>
-->
<!--<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">-->
<Wix xmlns="http://schemas.Microsoft.com/wix/2006/wi" xmlns:util="http://schemas.Microsoft.com/wix/UtilExtension" xmlns:wxs="http://wixtoolset.org/schemas/v4/wxs">


  <!--
        .NET Framework installation state properties

        Official documentation can be found at the following location:

           .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1 - http://msdn.Microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
    -->

  <?define NetFx461MinRelease = 394254 ?>
  <?define NetFx461WebLink = http://go.Microsoft.com/fwlink/?LinkId=671728 ?>
  <?define NetFx461RedistLink = http://go.Microsoft.com/fwlink/?LinkId=671743 ?>

  <Fragment>
    <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
    <Property Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" Secure="yes" />
    <SetProperty Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" Value="1" After="AppSearch">
      WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx461MinRelease)"
    </SetProperty>
  </Fragment>

  <Fragment>
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/>

    <WixVariable Id="NetFx461WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx461MinRelease)" Overridable="yes" />
    <WixVariable Id="NetFx461WebInstallCondition" Value="" Overridable="yes" />
    <WixVariable Id="NetFx461WebPackageDirectory" Value="redist\" Overridable="yes" />

    <PackageGroup Id="NetFx461Web">
      <ExePackage
          InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx461FullLog].html&quot;"
          RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx461FullLog].html&quot;"
          UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx461FullLog].html&quot;"
          PerMachine="yes"
          DetectCondition="!(wix.NetFx461WebDetectCondition)"
          InstallCondition="!(wix.NetFx461WebInstallCondition)"
          Id="NetFx461Web"
          Vital="yes"
          Permanent="yes"
          Protocol="netfx4"
          DownloadUrl="$(var.NetFx461WebLink)"
          LogPathVariable="NetFx461FullLog"
          Compressed="no"
          Name="!(wix.NetFx461WebPackageDirectory)NDP461-KB3102438-Web.exe">
        <RemotePayload 
          CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0" 
          CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC" 
          Description="Microsoft .NET Framework 4.6.1 Setup" 
          Hash="EE88B05232F43B517D4A368F7EE5065CDE7F67FA" 
          ProductName="Microsoft .NET Framework 4.6.1" 
          Size="1424328" 
          Version="4.6.1055.0" />
      </ExePackage>
    </PackageGroup>
  </Fragment>

  <Fragment>
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/>

    <WixVariable Id="NetFx461RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx461MinRelease)" Overridable="yes" />
    <WixVariable Id="NetFx461RedistInstallCondition" Value="" Overridable="yes" />
    <WixVariable Id="NetFx461RedistPackageDirectory" Value="redist\" Overridable="yes" />

    <PackageGroup Id="NetFx461Redist">
      <ExePackage
          InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx461FullLog].html&quot;"
          RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx461FullLog].html&quot;"
          UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx461FullLog].html&quot;"
          PerMachine="yes"
          DetectCondition="!(wix.NetFx461RedistDetectCondition)"
          InstallCondition="!(wix.NetFx461RedistInstallCondition)"
          Id="NetFx461Redist"
          Vital="yes"
          Permanent="yes"
          Protocol="netfx4"
          DownloadUrl="$(var.NetFx461RedistLink)"
          LogPathVariable="NetFx461FullLog"
          Compressed="no"
          Name="!(wix.NetFx461RedistPackageDirectory)NDP461-KB3102436-x86-x64-AllOS-ENU.exe">
        <RemotePayload
          CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0" 
          CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC" 
          Description="Microsoft .NET Framework 4.6.1 Setup" 
          Hash="83D048D171FF44A3CAD9B422137656F585295866" 
          ProductName="Microsoft .NET Framework 4.6.1" 
          Size="67681000" 
          Version="4.6.1055.0" />
      </ExePackage>
    </PackageGroup>
  </Fragment>
</Wix>

Ajoutez-le (par exemple sous le nom NetFx461.wxs) à votre projet d’installation WiX et vous aurez accès aux propriétés souhaitées.

7
Dan Field

La valeur WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED a été implémentée par FabienLavocat et fusionnée il y a une semaine selon la demande d'extraction GitHub

4
mj2008

Voici ma solution pour ce problème. Je l'utilise pour vérifier .NET 4.7 mais cela devrait fonctionner pour toutes les versions du framework .NET 4.5+.

Voir https://docs.Microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#net_b pour obtenir une liste des numéros de révision valides.

J'utilise une recherche dans le registre pour définir la valeur d'une propriété sur la révision du framework .NET 4.x. Plus tard, j'utilise cette propriété de la manière bien connue pour vérifier la condition de lancement:

<?define NetFx47MinRelease = 460798 ?>
<Property Id="NETFRAMEWORK47" Value="0" Secure="yes">
    <RegistrySearch
        Id="RegSearch"
        Root="HKLM"
        Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
        Name="Release"
        Type="raw" />
</Property>

<Condition Message="PPG OnBoard requires .NET Framework 4.7 installed.">
    <![CDATA[NETFRAMEWORK47 >= "#$(var.NetFx47MinRelease)"]]>
</Condition>

Malheureusement, dans cette situation, RegistrySearch renvoie la valeur DWORD précédée du caractère '#', ce qui la rend inutilisable dans une condition "supérieure à" dans mes premiers tests. Utilisez la syntaxe exacte "#$(var.NetFx47MinRelease)" pour pouvoir comparer "plus grand que".

0
Andreas