【问题标题】:How do you execute a custom action in WiX only if an installed feature is being uninstalled?仅当正在卸载已安装的功能时,如何在 WiX 中执行自定义操作?
【发布时间】:2011-01-12 07:21:39
【问题描述】:

我有一个 WiX 安装程序,其中包含需要在卸载时执行的每个功能的自定义操作。现在我遇到了一个问题,无论该功能是否由用户实际安装,操作都会执行。自定义操作失败,因为它们期望某些资源存在,然后整个安装陷入中断状态。

当且仅当其相关功能被卸载时,运行自定义操作的正确方法是什么?如果有帮助,我在下面包含了我目前正在使用的 sn-p。

<Custom Action="LaunchUninstallCustomAction" Before="RemoveFiles"><![CDATA[(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") AND (&FeatureName<=2)]]></Custom>

【问题讨论】:

    标签: wix windows-installer custom-action


    【解决方案1】:

    试试

    <Custom Action="LaunchUninstallCustomAction" Before="RemoveFiles">
       <![CDATA[(NOT UPGRADINGPRODUCTCODE) 
                 AND (&FeatureName=2) AND (!FeatureName=3)]]>
    </Custom>
    

    有关条件语法的detailsexamples,请参阅 MSDN

    【讨论】:

    • 嗨 Samuel,您能否详细说明一下 ![CDATA[(NOT UPGRADINGPRODUCTCODE) 在您的 sn-p 中的用途
    • IIRC,我包括在内,因为它在问题的原始 sn-p 中。目的是确保自定义操作仅在删除特定功能时运行,而不是在升级整个产品时运行。
    • 也为我工作。非常感谢分享这个。
    【解决方案2】:

    听起来自定义操作被破坏并且没有正确处理丢失的资源。

    如果用户手动删除文件,CA 将如何处理?如果用户删除应用程序文件夹,然后尝试通过 ARP 将其删除,会发生什么情况?

    如果用户只是删除了一项功能,而不卸载整个应用程序,会发生什么情况?长期修复 CA 会更好。

    【讨论】:

    • 这不能回答我的问题。我知道这不是最好的方法,但我受到无法避免的遗留代码的限制。鉴于这不是最好的方法,考虑到提供的限制,最好的方法是什么?
    • 可能存在自定义步骤无法根据环境检测是否必须运行的情况。
    猜你喜欢
    • 2013-06-29
    • 2010-10-06
    • 2013-03-08
    • 2019-04-19
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2017-11-29
    • 2012-03-21
    相关资源
    最近更新 更多