11

给你一个背景 - 我有一个来自我们供应商的 4 个 MSI,这必须发送到我们公司的服务器(我们正在查看大约 3500 个服务器)。截至目前,我的同行正在使用 vbs、ps1 脚本来管理它。但是脚本的问题在于,每次更新到来时,我们都必须担心在运行新包之前卸载现有包和大量的硬编码。

我想通过设置一个 WIX 脚本将所有 4 个 MSI 打包在一起来自动化整个过程(使用非常少的硬编码)。我阅读了 WIX 捆绑包并使用它来创建单个 MSI。但是现在有很多变量要传递给 4 个 MSI,所以我想使用自定义操作根据运行 MSI 的环境/机器来设置这些变量。但我不能让自定义动作起作用?我错过了什么吗?

谷歌搜索了一下,我看到 Bundle 中没有 CustomActions 之类的东西?有人可以确认吗?

另外,如果没有 CA,我有什么选择?如何操纵要传递给 4 MSI 的变量?其中大多数需要根据正在运行的机器进行设置(如安装路径、用户 ID、应用程序池 ID 等)。

4

2 回答 2

12

还有第四个选项,一个有用的轻量级 hack,由 Vijay Kotecha 确定(参见http://vijayskotecha.blogspot.com/2013/07/wix-bootstrapper-custom-action.html),...

本质上,<ExePackage>围绕传递的 .bat 或 .cmd 批处理文件构建一个。批处理/命令文件包含单行“ %*”,它将所有命令行参数作为第一类命令重新执行。

因此:

<ExePackage ... SourceFile="SourcePath\WixCustomAction.cmd"
    InstallCommand="my_custom_action.exe my_custom_parameters" />
<ExePackage ... SourceFile="SourcePath\WixCustomAction.cmd"
    InstallCommand="my_next_action.exe my_next_parameters" />

WixCustomAction.cmd仅包含“”的文件在哪里%*

这些可以根据需要使用不同的 s 依次<ExePackages>放入。<Bundle><Chain>InstallCommand

于 2015-12-05T22:28:03.827 回答
4

在我看来,您有三个选择:

  1. 根据您需要的信息,您可以使用 WixUtilExtension 执行简单的任务,例如读取注册表项和执行文件搜索,然后您可以将结果作为属性传递给您的安装包。

  2. 在各个安装包本身(而不是捆绑包中)中实施自定义操作。

  3. 编写您自己的自定义引导程序应用程序以确定您需要设置的所有属性,然后将它们传递给您的安装包。这比 #1 和 #2 更复杂,但如果您感兴趣,以下链接应该可以帮助您入门: 介绍托管引导程序应用程序编写 wpf wix 安装程序

于 2012-10-23T15:55:54.177 回答