Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有在卸载已安装的功能时,如何在WiX中执行自定义操作?_Wix_Windows Installer_Custom Action - Fatal编程技术网

只有在卸载已安装的功能时,如何在WiX中执行自定义操作?

只有在卸载已安装的功能时,如何在WiX中执行自定义操作?,wix,windows-installer,custom-action,Wix,Windows Installer,Custom Action,我有一个WiX安装程序,每个功能都有需要在卸载时执行的自定义操作。现在我遇到了一个问题,无论用户是否实际安装了该功能,操作都会执行。自定义操作失败,因为它们期望某些资源存在,然后整个安装都陷入了中断状态 当且仅当卸载自定义操作的相关功能时,运行自定义操作的正确方法是什么?如果有帮助的话,我已经在下面列出了我目前正在使用的代码片段 <Custom Action="LaunchUninstallCustomAction" Before="RemoveFiles"><![CDATA[

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

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

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

听起来好像自定义操作被破坏了,无法正确处理丢失的资源

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

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

试试看

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


有关条件语法的详细信息,请参见MSDN,

,这并不能回答我的问题。我知道这不是最好的方法,但我受到无法避免的遗留代码的限制。如果这不是最好的方法,那么在提供的约束条件下,什么是最好的方法?可能会出现这样的情况:自定义步骤无法检测是否必须基于环境运行。您好,Samuel,请详细说明此步骤的目的![CDATA[(不是UPGRADINGPRODUCTCODE)在您的代码片段IIRC中,我之所以包括它,是因为它在问题的原始代码片段中。其目的是确保自定义操作仅在删除特定功能时运行,而不是在升级整个产品时运行。这也为我所用。非常感谢您分享这一点。