【发布时间】: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 中的每个文件,但我不知道是否可能。