将非常大的文件添加到 WiX Burn 引导程序时,如何避免出现 LGHT0306?

How can I avoid LGHT0306 when adding a very large file to a WiX Burn bootstrapper?

我正在使用 WiX Burn 3.9 创建引导程序(使用 UI 的自定义托管引导程序应用程序)。我正在构建一个微型版本的引导程序(几兆字节),可以根据需要下载依赖项。我还在构建一个嵌入了所有依赖项的版本,以支持在安全网络上轻松安装。 /layout 命令行选项可用于降低依赖性,但我的组织更喜欢单个整体可执行文件来为用户简化操作。

一切都进行得很顺利,直到我被要求添加一个 1GB 的虚拟设备文件和相关的安装自述文件。引导程序所要做的就是将它们放在用户在引导程序中指定的文件夹中 UI。我将 *.ova 和 *.htm 文件放入自解压 zip 可执行文件中,并在命令行上将目标文件夹传递给它。 Web 安装程序版本工作得很好,但后来我尝试构建离线安装程序,嵌入了所有内容。我开始收到来自灯光的错误:

light.exe(0,0): error LGHT0306: An error (E_FAIL) was returned while finalizing a CAB file. This most commonly happens when creating a CAB file with more than 65535 files in it. Either reduce the number of files in your installation package or split your installation package's files into more than one CAB file using the Media element.

我发现的关于此错误的唯一相关对话是 here。这似乎与文件大小有关,与文件数量无关。我想知道问题是否与引导程序可执行文件的总体大小(大约 2 GB)或超大自解压 zip 可执行文件的大小(大约 1 GB)有关。当我使用 WiX 构建 MSI 时,将内容分解为单独的 cab 文件的语法非常清晰,但我不确定是否为基于 Burn 的 boostrapper 公开了相同的概念,或者是否可以做很多事情嵌入那个大小的文件。

对于嵌入式有效负载,Burn 使用一个 .cab 文件,它在构建过程中附加到 .exe。这意味着嵌入式有效负载的大小有 2GB 的限制。您可以附加到 .exe 的数量也可能有限制。

我还没有尝试过,但看起来您可以尝试使用显式 Container elements.

附加多个容器

除非您绝对需要一个 .exe,否则您也可以只创建一个未压缩的包。 .msi、.cab 和 .exe 文件将是外部文件,但如果您正在创建 .iso 图像以供下载(例如),它就可以工作。