Как выполнить настраиваемое действие в WiX, только если установленная функция удаляется?

У меня есть установщик WiX, в котором есть настраиваемые действия для каждой функции, которые необходимо выполнить при удалении. Прямо сейчас я столкнулся с проблемой, когда действия выполняются независимо от того, была ли эта функция фактически установлена ​​пользователем. Пользовательские действия терпят неудачу, потому что они ожидают, что определенные ресурсы существуют, а затем вся установка застревает в неработающем состоянии.

Каков правильный способ запуска настраиваемого действия тогда и только тогда, когда связанная с ним функция удаляется? Я включил фрагмент, который я сейчас использую ниже, если это поможет.

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

person dskiles    schedule 02.02.2010    source источник


Ответы (2)


Пытаться

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

подробности о синтаксисе условий и примеры

person Samuel Jack    schedule 03.02.2010
comment
привет Сэмюэль, не могли бы вы уточнить цель ![CDATA[(NOT UPGRADINGPRODUCTCODE) в вашем фрагменте - person sttaq; 16.05.2012
comment
IIRC, я включил, потому что это было в исходном фрагменте вопроса. Цель состоит в том, чтобы обеспечить выполнение настраиваемого действия только при удалении определенной функции, а не при обновлении всего продукта. - person Samuel Jack; 16.05.2012
comment
Работал и для меня. Большое спасибо, что поделились этим. - person Farrukh Waheed; 20.05.2013

Похоже, что пользовательские действия не работают и неправильно обрабатывают отсутствующие ресурсы.

Как ЦС справится с этим, если пользователь вручную удалит файлы? Что произойдет, если пользователь удалит папку приложения, а затем попытается удалить ее через ARP?

Что произойдет, если пользователь просто удалит функцию, не удаляя все приложение? Вам будет лучше долгосрочное исправление CA.

person saschabeaumont    schedule 03.02.2010
comment
Это не отвечает на мой вопрос. Я знаю, что это не лучший способ сделать это, но я ограничен устаревшим кодом, которого я не могу избежать. Учитывая, что это не лучший способ сделать это, как лучше всего это сделать, учитывая предоставленные ограничения? - person dskiles; 03.02.2010
comment
Может возникнуть ситуация, когда пользовательский шаг не может определить, нужно ли его запускать или нет, в зависимости от среды. - person Dennis; 14.01.2013