Wix调度自定义操作

时间:2016-03-10 21:45:20

标签: wix windows-installer installshield wix3.10

在从installshield转换为wix的过程中,我正在移植自定义操作。

一个用于确定以前安装的版本,并在找到任何消息时弹出消息。我猜之前没有正确跟踪过guids。

在installshield中,看起来他们在ValidateProductID之后安排了CA.我也尝试过这样做:

<CustomAction Id="CA_CheckPreviousVersions.SetProperty" Property="CA_CheckPreviousVersions" Value="ERROR_UNINSTALL_VERSION=$(var.ERROR_UNINSTALL_VERSION)" />
<CustomAction Id="CA_CheckPreviousVersions" DllEntry="CheckPreviousVersions" Execute="deferred" BinaryKey="LunaClientCustomActions_dll" />

<InstallExecuteSequence>
...
<Custom Action="CA_CheckPreviousVersions.SetProperty" After="ValidateProductID" />
<Custom Action="CA_CheckPreviousVersions" After="CA_CheckPreviousVersions.SetProperty" >NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence> 

除此之外,我收到一个令人讨厌的警告:

error LGHT0204: ICE77: CA_CheckPreviousVersions is a in-script custom action.  It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table

为什么我得到这个,而IS似乎允许它?更重要的是,我如何复制以前的行为?

1 个答案:

答案 0 :(得分:2)

您尚未显示自定义操作定义,但该消息表明它已延迟,必须按消息指示排序。也许原始类型是即时的。

如果您的意思是以前安装的产品版本(或实际上任何您了解UpgradeCode的基于MSI的产品),则不需要任何代码。如果您要使用WiX MajorUpgrade元素,则可以检测以前的版本,因为将设置WIX_UPGRADE_DETECTED属性,您可以将其用作启动条件,或者您计划执行的任何操作。或使用Upgrade和UpgradeVersion元素检测以前的版本和版本范围。从你所说的,似乎没有必要运行代码。只需使用升级搜索属性并显示对话框或错误或其他内容。