Wix调度自定义操作

Wix调度自定义操作,wix,windows-installer,installshield,wix3.10,Wix,Windows Installer,Installshield,Wix3.10,在从installshield转换到wix的过程中,我正在移植自定义操作 一种是确定以前安装的版本,如果发现任何版本,则弹出消息。我猜以前没有正确地跟踪guid 在installshield中,似乎他们在ValidateProductID之后安排了CA。我也试着这么做: <CustomAction Id="CA_CheckPreviousVersions.SetProperty" Property="CA_CheckPreviousVersions" Value="ERROR_UNINST

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

一种是确定以前安装的版本,如果发现任何版本,则弹出消息。我猜以前没有正确地跟踪guid

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

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

您没有显示自定义操作定义,但消息表明它已延迟,必须按照消息指示的顺序排列。也许最初的类型是直接的


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

您尚未显示自定义操作定义,但消息表明它已延迟,并且必须按消息指示的顺序排列。也许最初的类型是直接的


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

我编辑了原始帖子以显示CA defs。至于你对我是否需要“运行代码”的分析。。。我还不知道你在说什么!LOL代码正在检查hklm\m\w\cv\uninstall键中的特定GUID。我只是移植了我之前的代码,这一部分已经完成了;我唯一关心的是让它与installshield版本在同一个位置排序。而且。。。“延期”是罪魁祸首。为什么会有不同?ValidateProductID步骤不是延迟序列的一部分吗?安装的“延迟”部分是实际更改系统的部分,InstallInitialize和InstallFinalize之间的执行序列,所有延迟的自定义操作都必须在此范围内。我编辑了原始文章以显示CA定义。至于你对我是否需要“运行代码”的分析。。。我还不知道你在说什么!LOL代码正在检查hklm\m\w\cv\uninstall键中的特定GUID。我只是移植了我之前的代码,这一部分已经完成了;我唯一关心的是让它与installshield版本在同一个位置排序。而且。。。“延期”是罪魁祸首。为什么会有不同?ValidateProductID步骤不是延迟序列的一部分吗?安装的“延迟”部分是实际更改系统的部分,InstallInitialize和InstallFinalize之间的执行序列,所有延迟的自定义操作都必须在此范围内。
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