WIX 引导程序在包含 'optional' 个 CAB 文件的 MSI 包上失败
WIX bootstrapper fails on MSI package with 'optional' CAB files
使用 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 主机似乎忽略了这一点。
所有 CAB 文件也存在于编译时创建的 'BootstrapperApplicationData.xml' 中。但是我没有在引导程序源中提到它们。 WIX burn 明显分析包。
如何让引导程序主机忽略一个 MSI 包丢失的 CAB 文件?
Burn 不支持这种情况。它假定您的包中的 .cab 是必需的,并且始终验证所有包和有效负载。
使用 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 主机似乎忽略了这一点。
所有 CAB 文件也存在于编译时创建的 'BootstrapperApplicationData.xml' 中。但是我没有在引导程序源中提到它们。 WIX burn 明显分析包。
如何让引导程序主机忽略一个 MSI 包丢失的 CAB 文件?
Burn 不支持这种情况。它假定您的包中的 .cab 是必需的,并且始终验证所有包和有效负载。