微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用WiX Burn智能安装.NET 4.x

当安装可以使用.NET 4.0或4.5的应用程序时,安装先决条件.NET框架的最佳做法是什么?而在WiX中使用Burn来实现它呢?

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

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

>优点:没有已知的(除了Windows XP,这是唯一的选择)

选项2:如果.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的优点
应用。

据我所知,如果性能改进很重要,最佳做法是选项2,如果平均部署速度很重要,则选项3将是最佳选择。这听起来不错吗我对选项1没有任何好处吗?最重要的是,如果选项3确实有意义,那么在从网络安装.NET时,如何使用Burn来实现它?

下面是我如何在我的包中检测到.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框架。再次,如果您使用自己的自定义托管引导程序,这只是一个问题。

原文地址:https://www.jb51.cc/windows/372559.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐