2010-02-02 84 views
6

我有一个WiX安装程序,它具有每个功能需要在卸载时执行的自定义操作。现在,我遇到了执行操作的问题,无论用户是否实际安装了该功能。自定义操作失败是因为他们期望某些资源存在,然后整个安装会处于崩溃状态。仅当正在卸载已安装的功能时,您如何在WiX中执行自定义操作?

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

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

回答

16

尝试

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

查看MSDN了解病情语法detailsexamples

+0

这样做。谢谢! – dskiles 2010-02-03 18:31:18

+0

嗨塞缪尔,请你详细说明![CDATA [(没有升级产品代码)在你的片段 – sttaq 2012-05-16 09:23:58

+0

IIRC的目的,我包括在内,因为它是在问题中的原始片段。目的是确保自定义操作仅在删除特定功能时运行,而不是在整个产品正在升级时运行。 – 2012-05-16 10:16:00

-3

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

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

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

+0

那并没有回答我的问题。我知道这不是最好的方法,但我受到了我无法避免的遗留代码的束缚。鉴于这不是最好的办法,考虑到提供的限制,最好的办法是什么? – dskiles 2010-02-03 15:14:12

+0

当自定义步骤无法基于环境检测是否需要运行时,可能会出现这种情况。 – Dennis 2013-01-14 14:51:58

相关问题