WIX引导程序在带有“可选” CAB文件的MSI软件包上失败

时间:2018-07-10 12:25:24

标签: wix windows-installer wix3.10

使用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 boostrapper主机似乎忽略了这一点。

在编译时创建的“ BootstrapperApplicationData.xml”中也存在所有CAB文件。但是我没有在引导程序来源中提及它们。 WIX burn显然会分析软件包。

如何使引导程序主机忽略一个MSI程序包丢失的CAB文件?

1 个答案:

答案 0 :(得分:0)

刻录不支持这种情况。它假定您的包中需要.cabs,并始终验证所有包和有效负载。