加快WiX安装程序的构建过程

Pos*_*ack 5 installer windows-installer wix heat visual-studio

对于我的Wix项目,我通过Visual Studio的预构建事件收获了4个目录,这将导致大约160mb的数据和大约220个文件,但是构建过程花费了很长时间。

我如何加快该过程?我有一个嵌入式media.cab文件,它将保存所有文件。是文件的大小或数量会减慢该过程?还是在预建活动中使用加热工具进行收割?使用HeatDirectory元素会更快吗?

有人在加快速度方面取得了一些经验吗?

Cam*_*ron 9

对于我们来说,绝大多数时间都花在调用上light(用于链接阶段)。

light压缩机柜的速度非常慢。DefaultCompressionLevel将.wixproj 中的更改highmszip(或lownone) 有很大帮助。然而,我们的构建仍然太慢。

事实证明,light独立处理机柜,并默认在多个线程上自动链接它们。要利用这种并行性,您需要生成多个机柜。在我们的 .wxsProduct元素中,我们将所有内容放置在一个柜子中:

<MediaTemplate EmbedCab="yes" />
Run Code Online (Sandbox Code Playgroud)

事实证明,您可以使用该MaximumUncompressedMediaSize属性来声明您希望文件自动分片为不同 .cab 文件的阈值(以 MB 为单位):

<MediaTemplate EmbedCab="yes" MaximumUncompressedMediaSize="2" />
Run Code Online (Sandbox Code Playgroud)

现在light速度要快得多,即使进行了high压缩,但对于增量构建(只有少数文件发生变化)来说仍然不够快。

回到 .wixproj,我们可以使用以下内容来设置 Cabinet 缓存,这对于很少有文件更改且大多数 Cabinet 不需要重新生成的增量构建来说是理想的选择:

<CabinetCachePath>$(OutputPath)cabcache\</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>
Run Code Online (Sandbox Code Playgroud)

抑制验证还可以显着提高速度(默认情况下,light.exe 花费大约三分之一的时间来验证 .msi)。我们为调试版本激活此功能:

<SuppressValidation>True</SuppressValidation>
Run Code Online (Sandbox Code Playgroud)

通过这些更改,我们的最终(增量)构建对于 32 MB .msi 输出的时间从一分多钟缩短到几秒钟,并且即使在压缩high级别下,完整重建也保持在一分钟以内。


Ste*_*mul 1

WiX 帮助文件如何:优化构建速度。换句话说:和是 WiX 中用于加速构建的内置机制。1) Cabinet reuse2) multi-threaded cab creation


硬件:不可避免"throw hardware at it"。新SSD磁盘NVMe比旧 IDE 驱动器快得多,您可能想尝试将它们作为提高构建速度和安装速度的另一种方法。显然是的,但非常重要。确实可以提高开发速度。看到这个答案

NVMe 驱动器面临的挑战?1)它们运行很热,2)通常容量(大小)有限,3)在笔记本电脑中使用时它们可能比旧的 2.5 英寸驱动器更容易受到攻击(我不确定 - 请记住,某些 NVMe 驱动器牢固地焊接到笔记本电脑的主板上) ,4)如果您没有优质的外部外壳(外形尺寸等...),数据救援可能会有点困难,5)据说 NVMe 驱动器会随着时间的推移而烧坏,6)它们仍然有些昂贵 - 尤其是容量较大的驱动器,并且当然还有进一步的挑战 -但总的来说:这些驱动器非常棒


压缩:您可以尝试使用不同的压缩级别来编译您的设置(例如,调试版本没有压缩级别)。无压缩使构建速度更快。以下是执行相反操作的插图,设置更高的压缩(只需使用“无”而不是“高”即可达到您的目的):

关于压缩的相关答案:MSI文件使用的压缩方法是什么?

单独安装:如果您仍然进行压缩,您可以将先决条件合并模块放在单独的安装中,以避免为每个构建压缩它们(或者如果您在 Installshield 中,则使用发布标志,或者检查Wix 中的预处理器功能)。

外部源文件:我想如果可以接受的话,您可以使用外部源文件- 那么您在构建过程中就不会进行冗长的压缩操作,而只是文件副本(它会变得越来越快 - 特别是对于闪存驱动器)。

Shim :如果您要测试的是安装本身及其 GUI 和自定义操作,则另一种技术是将您安装的所有文件填充为1 KB 。那么它只是一个设置的“外壳” - 这是测试设置的新自定义操作的好方法。许多人已经为此编写了工具,但我没有给您的链接。总有github.com可供搜索。

发布标志:节省时间的另一种方法是使用特殊的发布标志(仅限 Installshield)来编译您当前正在处理的安装程序的较小版本(忽略许多功能)。WiX 通过其预处理器具有类似的可能性。有关WiX 预处理器实际使用的更多信息。


调试构建:我通常使用这些技术的组合来进行调试构建

  • 当我尝试和添加新功能并一直重建和安装设置时,我通常会使用外部源文件。
  • 发布标志仅编译部分设置,橱柜重用和发布标志相结合可以节省大量时间,具体取决于设置的大小、文件数量和硬件配置。
  • 在我看来,也许最有效的是单独的设置(前提是它稳定并且不经常更改)。但要注意:Wix 安装多个应用程序(拆分安装时涉及的问题)。

我的看法是:进行仅先决条件的单独设置这对于大规模部署场景也有好处,在这种场景中,企业用户希望使用自己的标准化先决条件,并且对巨大设置中的大量嵌入式“垃圾”感到恼火。大公司中的大量包准备时间都花在删除过时的运行时和先决条件上。您还可以提供对这些先决条件的更新,而无需重建整个设置。良好的解耦。


链接: