Edw*_*rey 18 bootstrapping windows-installer wix burn wix3.6
安装可以使用.NET 4.0或4.5的应用程序时,安装先决条件.NET框架时的最佳做法是什么?你如何使用Burn in WiX实现它?
这些是我所知道的选项和权衡:
选项1:安装.NET 4.0(正如您所需)
选项2:如果不存在.NET 4.5,请安装.NET 4.5
选项3:仅当.NET 4.x不存在时才安装.NET 4.5
据我所知,如果性能改进很重要,最佳做法是选项2,如果平均部署速度很重要,则选择3.这听起来不错吗?我错过了选项1的任何优势吗?最重要的是,如果选项3确实有意义,那么在从Web安装.NET时如何使用Burn实现它?
Bry*_*anJ 24
下面是我在我的包中检测.NET的方法.请注意DetectConditions和InstallConditions的使用.DetectCondition将检查是否安装了特定包,而InstallCondition可用于覆盖DetectCondition以指定何时应安装包.例如,在XP上,您无法安装.NET 4.5,因此我的InstallCondition会阻止在这种情况下安装.
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" />
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" />
<!-- .NET 4.5 only installed if Vista or higher AND it's not already installed-->
<PackageGroup Id="Netfx45">
<ExePackage Id="Netfx45" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX45Full\dotnetfx45_full_x86_x64.exe"
DetectCondition="(Netfx4FullVersion="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion="4.5.50709" OR Netfx4x64FullVersion="4.5.50709"))"/>
</PackageGroup>
<!-- .NET 4.0 only installed if XP AND it's not already installed -->
<PackageGroup Id="Netfx4Full">
<ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe"
DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)"
InstallCondition="(VersionNT < v6.0 OR VersionNT64 < v6.0) AND (NOT (Netfx4FullVersion OR Netfx4x64FullVersion))"/>
</PackageGroup>
Run Code Online (Sandbox Code Playgroud)
然后,如果您想安装其中一个软件包,只需在您的链中引用它:
<Chain>
<PackageGroupRef Id='Netfx45'/>
</Chain>
Run Code Online (Sandbox Code Playgroud)
关于您的具体问题,我会安装应用程序测试的任何框架版本.如果针对.NET 4.0和.NET 4.5进行测试,我认为这是一个判断调用,但我会尝试尽可能简化设置体验.因此,如果已经安装了.NET 4.0并且应用程序不需要.NET 4.5,我就不会安装它.
此外,如果您使用自定义托管引导程序应用程序,则选项2存在缺点.假设您已安装.NET 4.0,并且您的托管引导程序需要.NET 4.0(或更高版本).当您运行安装程序时,它将安装.NET 4.5,它将取代.NET 4.0,迫使您的安装程序在中途重新启动,因为它在更新的同时使用.NET框架.同样,如果您使用自己的自定义托管引导程序,这只是一个问题.