Wix 安排自定义操作

Wix scheduling custom actions

在从 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

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

您还没有显示自定义操作定义,但消息表明它已被推迟并且必须按消息指示的顺序进行排序。也许原始类型是直接的。

如果您指的是以前安装的产品版本(或者实际上是您知道升级代码的任何基于 MSI 的产品),则不需要任何代码。如果您要使用 WiX MajorUpgrade 元素,您可以检测到以前的版本,因为 WIX_UPGRADE_DETECTED 属性 将被设置,您可以将其用作启动条件,或者您打算做的任何事情。或者使用 Upgrade 和 UpgradeVersion 元素来检测以前的版本和版本范围。从您所说的看来,似乎不需要 运行 代码。只需使用升级搜索属性并显示对话框或错误或其他任何内容。