【问题标题】:Wix scheduling custom actionsWix 计划自定义操作
【发布时间】:2016-03-10 21:45:19
【问题描述】:

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

一个是用于确定以前安装的版本并在找到时弹出一条消息。我猜之前没有正确跟踪 guid。

在 installshield 中,他们似乎将 CA 安排在 ValidateProductID 之后。我也尝试过这样做:

<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 似乎允许它?更重要的是,我如何复制以前的行为?

【问题讨论】:

    标签: wix windows-installer installshield wix3.10


    【解决方案1】:

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

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

    【讨论】:

    • 我编辑了原始帖子以显示 CA defs。至于你对我是否需要“运行代码”的分析......我不知道你在说什么(还)!大声笑代码正在检查 hklm\m\w\cv\uninstall 键中的特定 guid。我只是在移植我之前的代码并且那部分已经完成;我唯一关心的是让它与 installshield 版本在同一个地方排序。
    • 而且...“延期”是罪魁祸首。为什么会有所作为? ValidateProductID 步骤不是延迟序列的一部分吗?
    • 安装的“延迟”部分是实际改变系统的部分,InstallInitialize和InstallFinalize之间的执行顺序,所有延迟的自定义动作都必须在这个范围内。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多