【发布时间】:2018-07-10 12:25:24
【问题描述】:
使用 WIX 3.10:
我使用一些外部 CAB 文件创作了一个 MSI 包。 有时我们通过网络部署并省略一个或多个 CAB 文件(其中包含程序执行不需要的文件)。在安装时,我们取消选择相应的功能。在这种情况下,缺少 CAB 没有问题。
现在我使用托管 BA 编写了一个引导程序。 在包链中,我设置了“Cache=no”:
<MsiPackage Id="MyInstaller"
Compressed="no" Visible="no" ForcePerMachine="yes"
EnableFeatureSelection="yes"
Cache="no"
SourceFile="$(var.MyPackageFileName)">
问题是:在运行时,引导程序会验证所有包及其 CAB 文件(如果有)是否存在。它在执行链中的所有包之前执行此操作。
来自日志(缩短):
Acquiring package: MyInstaller, payload: MyInstaller, copy from: D:\X\MX-8-2-0-77-x86-Release.msi
Setting string variable 'WixBundleLastUsedSource' to value 'D:\X\'
Verified acquired payload: MyInstaller at path: C:\ProgramData\Package Cache\.unverified\MyInstaller, moving to: C:\ProgramData\Package Cache\{970B002C-448C-46E8-856C-5F9C5B234AB4}v8.2.0.77\MX-8-2-0-77-x86-Release.msi.
Acquiring package: MyInstaller, payload: cab502ABC9C22436673DD367A3B0E989121, copy from: D:\X\MX-8-2-0-77-x86-Release-Data.CAB
Verified acquired payload: cab502ABC9C22436673DD367A3B0E989121 at path: C:\ProgramData\Package Cache\.unverified\cab502ABC9C22436673DD367A3B0E989121, moving to: C:\ProgramData\Package Cache\{970B002C-448C-46E8-856C-5F9C5B234AB4}v8.2.0.77\MX-8-2-0-77-x86-Release-Data.CAB.
Prompt for source of package: MyInstaller, payload: cabBC894B366CE86BC776B6C0F16A45AEC9, path: D:\X\MX-8-2-0-77-x86-Release-HelpAndDoc.CAB
Failed to resolve source for file: D:\X\MX-8-2-0-77-x86-Release-HelpAndDoc.CAB, error: 0x80070002.
Error 0x80070002: Failed while prompting for source (original path 'D:\X\MX-8-2-0-77-x86-Release-HelpAndDoc.CAB').
Failed to acquire payload: cabBC894B366CE86BC776B6C0F16A45AEC9 to working path: C:\Users\CHRIST~1.THI\AppData\Local\Temp\{3CF902F0-06EB-46E8-BECF-900FA010D2EC}\cabBC894B366CE86BC776B6C0F16A45AEC9, error: 0x80070002.
Error 0x80070002: Failed while caching, aborting execution.
我不想提示丢失文件。我不想下载丢失的文件。而且我不想验证 CAB。因此我禁用了包缓存。但 WIX 助推器主机似乎忽略了这一点。
所有 CAB 文件也存在于编译时创建的“BootstrapperApplicationData.xml”中。但我没有在引导程序资源中提到它们。 WIX burn 显然会分析包。
如何让引导程序主机忽略一个 MSI 包丢失的 CAB 文件?
【问题讨论】:
-
只是一个解决方法的快速想法:不要删除不需要的 CAB 文件,而是用零大小的文件替换它们。
-
也许是最好的方法。使构建系统更加复杂。但它是可控的。谢谢!
标签: wix windows-installer wix3.10