【问题标题】:cpack MSI installation exceeding 2GB - packing into multiple CAB filescpack MSI 安装超过 2GB - 打包成多个 CAB 文件
【发布时间】:2020-09-28 10:51:26
【问题描述】:

我正在使用 cpack 和 Wix 创建包含媒体文件的 MSI 安装程序。
我读到了灾难性的失败,due to cabinet file exceeding 2GB
如果我理解正确的话,我可以将安装包拆分成多个CAB文件。
简化的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)
project(content 1.0.0 LANGUAGES CXX)

install(DIRECTORY video
  DESTINATION "."
  FILES_MATCHING REGEX ".+\.(avi|mp4)")

install(DIRECTORY images
  DESTINATION "."
  FILES_MATCHING PATTERN "*.png")

set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/misc/wix_patch.xml")
include(CPack)

我不确定是否正确,但我可以在 wix_patch.xml 中add more media elements

<CPackWiXPatch>
    <CPackWiXFragment Id="#PRODUCT">
        <Media Id='2' Cabinet='package1.cab' EmbedCab='no'/> 
        <Media Id='3' Cabinet='package2.cab' EmbedCab='no'/>
    </CPackWiXFragment>
</CPackWiXPatch>

现在问题来了,如何将 DiskId 属性分配给 CMake 文件中包含的文件?
如何将文件拆分为这些压缩文件?

如果我是正确的,我会在 Wix 文件中写:

<File Source="./vid.mp4" DiskId="2" />

将 vid.mp4 文件分配给 package2.cab。
如何使用 CPack 实现这一点?

【问题讨论】:

  • 在线不是一个选项,FAT32 也不是问题。我在这里尝试使用 cpack。
  • 其中一个解决方案是指示 WIX 添加到 files.wxs DiskId 中的每个文件,但我不知道是否可能。

标签: cmake wix wix3.5 cpack


【解决方案1】:

也许你根本不需要处理cabinet文件。

从 Wix 3.6 开始,您可以使用 &lt;MediaTemplate/&gt; 让 Wix 自动生成多个箱体。见http://www.joyofsetup.com/2011/06/21/wix-and-cabinetry/

但是,要将其与 CPack 一起使用,您必须使用 CPACK_WIX_TEMPLATE 作为默认模板指定您自己的模板文件 (https://gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/Internal/CPack/WIX.template.in) 使用不能与 &lt;MediaTemplate/&gt; 共存的 &lt;Media/&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多