如何在WIX Bundle中使用CustomAction?

Isa*_*110 10 wix burn wix3.6

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

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

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

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

erg*_*ack 10

有一个第四个选项,一个有用的轻量级黑客,由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" />
Run Code Online (Sandbox Code Playgroud)

哪个WixCustomAction.cmd文件只包含' %*'.

这些<ExePackages>可以被放置到<Bundle><Chain>使用不同需要依次InstallCommand根据需要秒.

  • 这可能在安装阶段触发ExePackage安装事件时起作用。但是不能在安装开始时使用,例如一些先决条件检查和显示一些错误消息... (2认同)

Bry*_*anJ 4

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

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

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

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

  • WiX Bundle 不是 MSI,而是可执行文件。将 .exe 重命名为 .msi 不会改变这一点。:) (5认同)