如何使用WiX的刻录智能安装.NET 4.x版(How to intelligently insta

2019-07-03 17:41发布

当安装的是可以使用.NET 4.0或4.5的应用程序,安装先决条件.NET框架时,什么是最好的做法呢? 你如何实现使用烧录在WiX的呢?

这是我所知道的选择和权衡:

选项1:安装.NET 4.0(你需要的东西)

  • 优点:未知(除了Windows XP,其中这是唯一的选择)

选项2:安装.NET 4.5如果.NET 4.5不存在

  • 优点:用户不必安装后对未来的应用.NET 4.5。 当用户以后不升级到.NET 4.5的应用程序将不会遇到一个.NET版本的变化。 应用得到立即的.NET 4.5的性能改进。

选项3:安装.NET 4.5仅当既不.NET 4.x的是本

  • 优点:比选项2,如果.NET 4.0已安装更迅速地部署。 如果不是,那么选择2的优点适用。

据我所知,最好的做法是选择2如果性能改进是重要的,选项3,如果平均部署的速度是很重要的。 这听起来确实对吗? 我失去了任何优势,选择1? 最重要的是,如果选择3有一定道理,你怎么实现它使用从网络安装.NET时烧?

Answer 1:

下面是我如何在我的包检测.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=&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 Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_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,我不会安装它。

此外,还有选项2,如果你使用的是自定义托管引导器应用是不利的。 比方说,你有.NET 4.0安装并管理引导程序需要.NET 4.0(或更高版本)。 当您运行安装程序将安装.NET 4.5将取代.NET 4.0,迫使你的安装程序,因为它是使用.NET框架,同时它被更新,以重启一半。 再次,这是唯一的,如果你使用的是自己定制的管理引导程序的问题。



文章来源: How to intelligently install .NET 4.x using WiX Burn