【发布时间】:2011-09-18 19:31:48
【问题描述】:
有人要求我将 Apple 的 Bonjour 安装程序捆绑到我们自己的 msi 安装程序中,以便 Bonjour 自动与我们的软件一起安装。以前有人做过吗?这似乎不是微不足道的,因为 msi 安装程序无法包含并启动另一个安装程序。我假设我需要某种批处理文件来顺序运行这两个安装程序?
【问题讨论】:
标签: wix windows-installer bonjour
有人要求我将 Apple 的 Bonjour 安装程序捆绑到我们自己的 msi 安装程序中,以便 Bonjour 自动与我们的软件一起安装。以前有人做过吗?这似乎不是微不足道的,因为 msi 安装程序无法包含并启动另一个安装程序。我假设我需要某种批处理文件来顺序运行这两个安装程序?
【问题讨论】:
标签: wix windows-installer bonjour
你需要一个引导程序;有几个免费提供,其中一个是在 WiX 中开发的,称为 Burn。
【讨论】:
您需要使用引导程序将 Bonjour 安装与您的安装程序链接起来。如果您使用的是 WiX 3.6 或更高版本,使用 Burn 创建包捆绑包是一个不错的选择。
我通过下载 Bonjour SDK 并以 7-zip 打开它找到了 Bonjour 安装程序,但我确信安装 SDK 也可以访问它。
我通常喜欢这样做的方式是为每个依赖包添加一个新的源文件到您的设置项目中,以使该逻辑与主应用程序设置分开。
Bonjour 包可以列为远程有效负载,以便即时检索,或将其构建到您的设置中。在这种情况下,它似乎更有可能在 (Compressed="yes") 中构建它。如果您需要添加任何与 bonjour 相关的额外依赖项或要传递给它的参数,您也可以在此处定义它们。
<Fragment>
<!-- if a web link actually exists, I didn't find it... -->
<?define BonjourWebLink = "http://path/to/Bonjour.msi"?>
<PackageGroup Id="BonjourWeb">
<MsiPackage Id="BonjourWeb"
Compressed="no"
DownloadUrl="$(var.BonjourWebLink)">
</MsiPackage>
</PackageGroup>
<PackageGroup Id="Bonjour">
<MsiPackage Id="Bonjour"
Compressed="yes"
SourceFile="path\to\Bonjour.msi"/>
</PackageGroup>
</Fragment>
在您的主包中,您只需添加对正确包组的引用。
<Chain>
<PackageGroupRef Id="Bonjour"/>
<MsiPackage SourceFile="path\to\YourProduct.msi"/>
</Chain>
由于 Bonjour 使用 MSI 而不是可执行文件,因此您无需执行任何操作来检测它是否存在; Burn 会为您处理。实际上,由于 WiX 从 MSI 获取您的捆绑包所需的大部分信息,这可能有点过头了,您可以直接将 MsiPackage 元素放入您的链中。
不要忘记仔细检查 Apple's terms 是否这样做。
【讨论】:
这将需要更多的工作,并且容易出现升级问题,但您可以使用 Bonjour MSI 并使用 dark 反编译它。将反编译的 MSI 转换为可以包含在安装程序中的 Merge 模块,您将进行一次安装。我过去安装了一些驱动程序,通常没有那么复杂。
【讨论】:
Wix Burn 现在比较稳定。我用的是 Wix 3.8。
如果您被允许重新分发 Bonjour 安装程序,您可以在 Wix Burn 中链接安装程序。您甚至可以设置条件将 Bonjour 指定为安装程序的先决条件。如果不存在,则将部署 Bonjour,否则可以跳过它。
您可以查看此链接以了解 Burn。
【讨论】: