如何使用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 选项3:仅当.NET 4.x不存在时才安装.NET 4.5 >优点:如果.NET 4.0是比选项2更快的部署 据我所知,如果性能改进很重要,最佳做法是选项2,如果平均部署速度很重要,则选项3将是最佳选择。这听起来不错吗我对选项1没有任何好处吗?最重要的是,如果选项3确实有意义,那么在从网络安装.NET时,如何使用Burn来实现它?
下面是我如何在我的包中检测到.NET。注意使用DetectConditions和InstallConditions。 DetectCondition将检查特定软件包是否已安装,而InstallCondition可用于覆盖DetectCondition以指定何时安装软件包。例如,在XP上,您无法安装.NET 4.5,因此在这种情况下,我的InstallCondition可以防止安装。
<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,我不会安装它。 而且,如果您使用自定义托管引导程序应用程序,则选项2有一个缺点。假设您已安装.NET 4.0,并且您的托管引导程序需要.NET 4.0(或更高版本)。当您运行安装程序时,它将安装.NET 4.5,该代替.NET 4.0,强制安装程序重新启动一半,因为它正在更新的同时使用.NET框架。再次,如果您使用自己的自定义托管引导程序,这只是一个问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 缺少系统文件System.Windows.Media我该怎么办?
- Windows – 如何使用批处理脚本从.properties文件读取
- Windows – IIS 7 – 允许http部分网站,https休息?
- windows – 作业停留在打印服务器上的Print Queue中
- 无法在Windows上使用单播启动两个ElasticSearch节点
- windows – 在批处理文件中,如何判断进程是否正在运行?
- Windows Server 2016-命令行方式管理Windows服务
- 缓存 – 如何在Windows Phone 8上清除Cordova Web View的缓
- Windows Phone 8.1设备(Lumia 930)和VS2013调试仅适用于已禁
- .net – 寻找SC.exe实用程序的API,以及有关自我更新Windows
- windows-phone-8 – ‘System.Net.HttpWebReques
- 无法从Windows Mono C#Project访问Linux gcc编译
- windows-server-core – 服务器核心上的SQL陷阱
- 如何在不使用ping.exe的情况下在Windows上使用Ja
- window下 人工智能 Keras、TensorFlow、PyTorch、
- Windows 10 MBR转GPT分区
- windows-phone-7 – 如何在不使用wp7中的启动器和
- windows – 如何在子进程中启动崩溃(很少)应用程
- win10 1903
- windows-server-2008 – 域控制器离线几天