2012-10-22 142 views
9

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

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

一点点的谷歌搜索,我看到的东西有没有CustomActions捆绑?有人可以确认吗?

另外,如果没有CA的我的选择是什么?我如何操作变量传递给4 MSI?他们中的大多数都需要根据正在运行的计算机进行设置(如安装路径,用户标识,应用程序池标识等)。

回答

4

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

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

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

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

+0

有道理!我尝试了一切可能的方式让CA在捆绑包中运行,但它并没有被调用。据我所知,即使WIX Bundle生成一个MSI文件,它实际上不是一个MSI(你不能用msiexec运行它,或者用ORCA打开它)。这只是一个将所有MSI组合在一起的exe或程序,它不具有任何MSI的属性。 P.S:我认为只是为了让它感到困惑,MS把它命名为MSI :) – Isaiah4110

+0

@ user1766402,我甚至没有意识到可以将该包作为msi输出,直到我读到你的问题。您可以右键单击Visual Studio中的项目并选择“属性”,然后将输出更改为.exe。无论如何,这应该是bundle/bootstrapper项目的默认值。 – BryanJ

+3

WiX Bundle不是MSI,它是一个可执行文件。将.exe重命名为.msi不会改变这一点。 :) –

9

还有第四个选项,一个有用的轻量级黑客,维杰确定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 s。

相关问题