2010-02-02 23 views
6

Tengo un instalador de WiX que tiene acciones personalizadas por función que deben ejecutarse en la desinstalación. En este momento me estoy encontrando con un problema donde las acciones se ejecutan independientemente de si la característica fue instalada o no por el usuario. Las acciones personalizadas fallan porque esperan que existan ciertos recursos y luego toda la instalación se bloquea en un estado dañado.¿Cómo se ejecuta una acción personalizada en WiX solo si se desinstala una característica instalada?

¿Cuál es la forma correcta de ejecutar una acción personalizada si y solo si se desinstala su función relacionada? He incluido el fragmento que estoy usando a continuación, si es útil.

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

Respuesta

16

Trate

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

Ver MSDN para details de la sintaxis y la condición examples

+0

Eso lo hizo. ¡Gracias! – dskiles

+0

hola Samuel, ¿puede por favor elaborar el propósito de! [CDATA [(NO ACTUALIZAR EL CÓDIGO DE PRODUCTO) en su fragmento – sttaq

+0

IIRC, lo incluí porque estaba en el fragmento original de la pregunta. El objetivo es garantizar que la acción personalizada solo se ejecute cuando se elimina una característica específica y no cuando se está actualizando todo el producto. –

-3

Parece que las acciones personalizadas están rotas y no se manejan correctamente los recursos faltantes.

¿Cómo manejarían las CA si un usuario elimina manualmente los archivos? ¿Qué sucede si un usuario elimina la carpeta de la aplicación y luego intenta eliminarla a través de ARP?

¿Qué sucede si un usuario simplemente elimina una característica, sin desinstalar toda la aplicación? Será mejor que arregles las CA a largo plazo.

+0

eso no responde a mi pregunta. Sé que no es la mejor manera de hacerlo, pero estoy limitado por el código heredado que no puedo evitar. Dado que no es la mejor manera de hacerlo, ¿cuál es la mejor manera de hacerlo, dadas las limitaciones? – dskiles

+0

Puede haber una situación en la que un paso personalizado no puede detectar si se debe ejecutar o no en función del entorno. – Dennis

Cuestiones relacionadas