Wix:处理大于 2 GB 的文件

Posted

技术标签:

【中文标题】Wix:处理大于 2 GB 的文件【英文标题】:Wix: Handling files greater than 2 GB 【发布时间】:2013-08-09 14:17:18 【问题描述】:

我正在使用 Wix Toolset v3.7 为应用程序创建 MSI 包。 问题是要打包的文件之一的大小超过 4 GB。 因此,MSI 生成失败并出现以下错误:

some_file.dat" 太大,文件大小必须小于 2147483648。

我已经寻找解决此问题的方法,但还没有任何具体的指示。有人知道如何使用 Wix 来解决这个问题吗?有什么方法可以将文件指定为拆分为 cab 并在解包时重新合并?

【问题讨论】:

【参考方案1】:

每File Table (Windows)

FileSize 列是 DoubleInteger,它只能表示 –2,147,483,647 到 +2,147,483,647 字节。 CAB 的大小和 MSI 的大小也有其他限制。这些是令人讨厌的限制,但安装程序需要发送大于 2GB 的文件是非常罕见的。

WiX 是在 Windows Installer 上构建的,所以你有点卡住了。您的安装程序是否通过媒体分发?您可能希望使用自定义操作手动复制文件。另一个想法是将文件分成几部分,然后使用自定义操作来加入它们。艰难的选择。

【讨论】:

【参考方案2】:

1) 您可以在 msi 构建之前使用通用 zip/package 工具拆分文件,然后将该工具用作自定义操作将它们放在一起。当然,您也可以自己编写这样的工具。然后该文件的各个部分由 MSI 以标准方式处理(在您的最终合并操作到来之前)。

2) 如果您不需要该文件的所有 msi 内容,您可以避免将大文件放入 msi,而只需使用工具构建自解压 .exe。这可以启动 msi 并通过脚本复制文件本身。也许是最简单的方法。

3) 使用 MSI 中的 DuplicateFiles 表,您可以尝试将文件复制为 MSI 本身中的自定义操作。有或没有自解压 .exe 的想法。没有意味着除了 .msi 之外大文件保持未压缩。意味着你已经在那个.exe中压缩了。

【讨论】:

以上是关于Wix:处理大于 2 GB 的文件的主要内容,如果未能解决你的问题,请参考以下文章

批处理脚本删除大于 50 GB 的 .ost

批处理文件返回文件夹大小并删除内容(如果大于50gb)

Python 3 - pickle 可以处理大于 4GB 的字节对象吗?

WIX - 单击一个按钮调用 dll 以运行批处理文件

System.IO.File.ReadAllBytes 用于大于 2GB 的文件

尽管 .wxi 文件中有变量,但 WiX“未定义的预处理器变量”