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.
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>
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:)
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 >= $(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 "[WixBundleName]" /log "[NetFx461FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
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 >= $(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 "[WixBundleName]" /log "[NetFx461FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx461FullLog].html""
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é.
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 RegistrySearch
renvoie 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".