安装可以使用.NET 4.0或4.5的应用程序时,安装先决条件.NET框架时的最佳实践是什么?以及如何使用Wix中的Burn实施它?
这些是我知道的选择和权衡:
选项1:安装.NET 4.0(您需要的是)
- 优点:没有知名度(Windows XP除外,这是唯一的选择)
选项2:Install .NET 4.5如果.NET 4.5不存在
- 优点:用户不必以后安装.NET 4.5应用。当用户以后使用时,应用不会体验.NET版本更改升级到.NET 4.5。应用程序立即得到改进的性能.net 4.5。
选项3:仅当两个不存在的.NET 4.x
时,安装.NET 4.5- 优点:如果.net 4.0是已安装。如果不是,那么选项2的优势申请。
下面是我在捆绑包中检测.net的方式。注意检测条件和安装条件的使用。检测条件将检查是否安装了特定的软件包,而安装条件可用于覆盖检测条件,以指定应何时安装软件包。例如,在XP上,您无法安装.NET 4.5,因此我的安装条件在这种情况下阻止了安装。
<util:RegistrySearch Root="HKLM" Key="SOFTWAREMicrosoftNet Framework SetupNDPv4Full" Value="Version" Variable="Netfx4FullVersion" />
<util:RegistrySearch Root="HKLM" Key="SOFTWAREMicrosoftNet Framework SetupNDPv4Full" 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 FilesMicrosoft SDKsWindowsv7.0ABootstrapperPackagesDotNetFX45Fulldotnetfx45_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 FilesMicrosoft SDKsWindowsv7.0ABootstrapperPackagesDotNetFX40dotNetFx40_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>
然后,如果要安装其中一个软件包,只需在链条中引用它:
<Chain>
<PackageGroupRef Id='Netfx45'/>
</Chain>
关于您的特定问题,我将安装对应用程序进行测试的任何框架版本。如果对.NET 4.0和.NET 4.5进行测试,我想这是一个判断呼吁,但是我会尽量简化设置体验。因此,如果已经安装了.NET 4.0,并且该应用程序不需要.NET 4.5,则我不会安装它。
另外,如果您使用自定义托管Bootstrapper应用程序,则选项2也是不利的。假设您已经安装了.NET 4.0,并且您的托管Bootstrapper需要.NET 4.0(或更高)。运行安装程序时,它将安装.NET 4.5替换.NET 4.0,从而迫使您的安装程序在中途重新启动,因为它正在使用.NET框架,同时它正在更新。同样,这只是一个问题,当您使用自己的自定义托管Bootstrapper时。