如何在WIX Bundle中使用自定义操作?

时间:2012-10-22 19:36:29

标签: wix wix3.6 burn

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

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

一点点谷歌搜索,我看到像Bundle中没有CustomActions的东西?有人可以证实吗?

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

2 个答案:

答案 0 :(得分:10)

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

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

因此:

<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是仅包含“%*”的文件。

根据需要,可以根据需要使用不同的<ExePackages><Bundle><Chain>连续放入InstallCommand

答案 1 :(得分:4)

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

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

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

  3. 编写自己的自定义引导程序应用程序以确定需要设置的所有属性,然后将它们传递给安装包。这比#1和#2更复杂,但是如果您对以下链接感兴趣,应该让您开始: introducing managed bootstrapper applicationswrite a wpf wix installer