Comment puis-je détecter whether.NET le Framework 4.6.1 ou supérieur est installé dans WiX?

j'utilise actuellement le markup suivant dans mon projet d'installateur WiX pour vérifier si .net Framework 4.5 ou plus 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 pour .net Framework 4.6.1 et ci-dessus?

j'utilise WiX 3.10.2.2516.

11
demandé sur dommer 2016-05-24 00:41:50

5 réponses

Que Diriez-vous de:

<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>
18
répondu ProfNimrod 2016-05-23 21:57:19

je crains que rien de ce qui précède n'ait fonctionné pour moi. Ou peut-être que je n'ai pas tout à fait compris comment mettre en œuvre les suggestions.

ce qui a fonctionné pour moi cependant était ma vérification précédente pour .net Framework 4.5.1 exigence similaire à votre vérification pour 4.5.

il suffit de changer la version pour la cible. le numéro de la version de Framework du réseau en celui requis, trouvé ici:https://msdn.microsoft.com/en-us/library/hh925568 (v=V110).aspx, a travaillé pour moi.

je 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 place le changement aujourd'hui, donc les prochains jours de tests me révéleront si cela fonctionne ou non. Sera mise à jour de mon commentaire quand j'en ai les résultats pour les partager.

P. P. S. Testing has successful my side. L'installateur échoue avec succès sur des environnements qui n'ont pas de .net Framework 4.6.1 installé et s'installe avec succès sur ceux qui le font. (Aussi: Merci @RamenChef, pour l'édition de mon post :+1:)

10
répondu Sascha 2016-09-30 12:42:57

mise à Jour: la version stable actuelle de WiX a maintenant cette intégration; cette réponse peut être intéressante si, pour une raison quelconque, vous utilisez une version plus ancienne (par exemple 3.10.3, qui était la plus récente à l'époque où elle a été écrite à l'origine)


la version actuelle de WiX (3.10.3) ne supporte pas cette propriété, pas plus que la 3.10 actuelle.x nightly build (3.10.3.3007) - il semble que le 3.11.0.960 le supporte, mais que build n'est pas étiqueté comme production prêt il n'est donc pas une option pour mon scénario.

ce que j'ai fini par faire était de saisir la source de NetFx461.wxs (ici), et 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 pourriez 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>

Ajouter que (dire que NetFx461.wxs) à votre projet d'installateur WiX et vous aurez accès à la propriété.

7
répondu Dan Field 2017-07-19 19:13:20
le pull request sur GitHub.

4
répondu mj2008 2016-05-24 09:49:26

Voici ma solution pour ce problème. Je l'utilise pour vérifier la présence de .NET 4.7, mais il devrait fonctionner pour toutes les versions de 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 une liste des numéros de révision valides.

j'utilise une recherche de Registre pour définir la valeur d'une propriété à la révision du .NET 4.x cadre. Plus tard, j'utilise cette propriété de la manière bien connue pour vérifiez les conditions 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 RegistrySearchrenvoie la valeur DWORD préfixée par un caractère '#' qui l'a rendu inutilisable dans une condition "plus grand que" dans Mes premiers tests. L'utilisation exacte de la "#$(var.NetFx47MinRelease)" syntaxe pour pouvoir comparer pour "plus grand que".

0
répondu Andreas 2017-08-07 11:23:31