如何使用Wix Burn智能安装.NET 4.X



安装可以使用.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的优势申请。
据我所知,如果绩效改进很重要,则最好的做法将是选项2,如果平均部署速度很重要,则选项3。这听起来对吗?我是否错过了选项1的优势?最重要的是,如果选项3确实有意义,则如何在网络安装.NET时使用Burn实施它?

下面是我在捆绑包中检测.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=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
              InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/>
</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 &lt; v6.0 OR VersionNT64 &lt; 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时。

相关内容

  • 没有找到相关文章

最新更新