保留预打包的 .cab 文件以使用 WiX 创建安装程序

Keep pre-packaged .cab file for creating installer with WiX

一些上下文:我想在我安装的产品中包含一个 Java 运行时的私有副本。 .msi 文件应该建立在集成管道上(Jenkins CI 服务器,将通过 maven 插件使用 WiX)。

一种选择是在构建安装程序时将 JRE(存档)解压缩到一个临时目录中,然后 heat dir 收集它。但是,这需要对文件进行解包、扫描和重新打包。

所以我希望我能提供一个已经完成的 jre.cab 文件并让 WiX 使用它。通过不必指定文件,或者通过热收集 cab 内容。

有没有办法做到这一点(除了手动打开驾驶室,我不想这样做,因为安装程序无法识别)。

如果我能提供 ZIP 或 TGZ 文件而不是 CAB 文件就更好了,但这不是必须的。每次 JRE 更改时创建一个 cab 就可以了。

这里有很多可能的答案。我给你两个。

1)我个人会做的:(跳过热度并封装为合并模块)

创建提取 cab 并构建 WiX 的构建 编写一个包含所有提取文件的 IsWix 合并模块项目。 在需要时签入并构建。现在您的构建档案区的架子上有一个 .MSM。

2) 我猜你会更喜欢什么(使用 Heat 并封装为二进制 Wix 库)

创建提取驾驶室的构建,运行s 热量并构建 WiX 在需要时签入并构建。您的构建档案区的架子上有一个 .wixlib/.wixobj。

我的工具 (IsWiX) 使 #1 变得轻而易举。是的,您每次接受新的 CAB 时都需要手动更新 MSM WXS 定义,但我认为这是微不足道且重要的事情。它更可靠。 MSM 会稍微减慢您创建 MSI 的速度,因为编译器/链接器必须为您解压、重新打包内容。

选项 2 假设 Heat 永远不会让你失望。这让我害怕。预先创建所有管道有点困难,理论上随着时间的推移维护起来会更少......假设 Heat 永远不会让你失望。 (我不会这么认为。)创建 .MSI 会快一点,因为二进制 wixlib 是 compiler/linker.

的最佳格式

选项 1 的额外好处是与 InstallShield 等其他工具兼容。

通过将 MSM 和 MSI 创建分为 2 个构建,您可以选择何时构建每个构建并将它们链接在一起。这在大型项目中可能非常有价值。然而,在许多情况下,优化会增加不必要的复杂性。如果我正在编写一个小型业务应用程序(比如应用程序和 JRE 之间总共有 100MB),我可能不会打扰。我可能会在几分钟内 运行 在具有 SSD 存储的快速 VM 上将整个事情作为整体构建。