如何强制 WiX 引导程序下载 MSI 包?

Posted

技术标签:

【中文标题】如何强制 WiX 引导程序下载 MSI 包?【英文标题】:How to force a WiX bootstrapper to download an MSI package? 【发布时间】:2012-08-13 09:01:36 【问题描述】:

我正在阅读 this section of WiX toolset manual,并想知道例如,在安装我的应用程序之前,引导程序必须下载并安装:

.NET Framework 客户端配置文件 SQL Server 2008 R2 共享管理对象。

我想,我可以这样描述对应的MsiPackage

但是the schema reference 的MsiPackage 元素告诉我们,

“至少必须指定 SourceFile 或 Name 属性。”

当然,它不会说谎 - 如果没有 SourceFileName,bundle 项目编译时会出错。

像这样将RemotePayload 添加到MsiPackage

  <MsiPackage Name="redist\SharedManagementObjects.msi"
              DisplayName="Microsoft SQL Server 2008 R2 Management Objects"
              DisplayInternalUI="yes"
              Vital="yes"
              DownloadUrl="http://go.microsoft.com/fwlink/?LinkID=188438&amp;clcid=0x409">
    <RemotePayload Size="10953728"
                   Version="10.50.1600.1"
                   ProductName="Microsoft SQL Server 2008 R2 Management Objects"
                   Description="Microsoft SQL Server 2008 R2 Management Objects"
                   Hash="6ce3a433309c63d98bcf0e2b9f1dfaed8cc18783"/>
  </MsiPackage>

导致构建错误:

无法读取包“”。无法安装此安装包 打开。验证包是否存在并且您可以访问它,或者 联系应用程序供应商以验证这是一个有效的 Windows 安装包。

我错过了什么吗?

【问题讨论】:

【参考方案1】:

类似问题已回答here:

今天不支持; RemotePayload 仅支持字段 需要验证下载的文件是预期的,但仅此而已 比起那个来说。这适用于 .exe,因为 Burn 将那些视为黑色 盒子。 Burn 从 MSI 包中收集了更多数据。

所以这个错误要么是 MsiPackage 的允许子级,要么是 它还不支持 MSI 所需的所有数据。

【讨论】:

以上是关于如何强制 WiX 引导程序下载 MSI 包?的主要内容,如果未能解决你的问题,请参考以下文章

强制 WiX Burn 引导程序允许 MSI 文件使用 REINSTALLMODE=amus

WiX - 将参数从 MSI 传递到 Xeam 引导程序应用程序

用Wix手工编辑XML制作C++ MSI安装程序,怎样保证安装新版本时候强制卸载旧版本,急急急!!!

托管的 WiX 引导程序包

如何在升级过程中运行捆绑包时,如何在WIX(Windows安装程序xml)引导程序项目中将按钮文本更改为“升级”?

如何强制卸载损坏的 Wix 捆绑包