72 votes

Comment exécuter une action personnalisée uniquement lors de l'installation (et non de la désinstallation) ?

Je suis sûr que c'est assez facile, mais j'ai eu du mal à le faire. J'ai une action personnalisée qui exécute un installateur différent (non-msi) lors de l'installation. Malheureusement, j'ai remarqué qu'elle exécute également le programme d'installation lors de la désinstallation !

J'ai regardé les options mais je n'arrive pas à trouver comment arrêter cela. Si quelqu'un pouvait m'aider, je lui en serais incroyablement reconnaissant.

De même, comment puis-je configurer une action personnalisée pour qu'elle ne se déclenche que pendant la désinstallation ? Toute aide est la bienvenue !

163voto

saschabeaumont Points 14415

Ajoutez une condition à l'action pour qu'elle ne soit déclenchée que pendant l'installation, et non la désinstallation.

Action exécutée uniquement pendant l'installation

NOT Installed AND NOT PATCH

Action exécutée pendant l'installation et la réparation

NOT REMOVE

Exécuter uniquement lors de l'installation initiale :

NOT Installed

Exécution lors de l'installation initiale ou lorsque la réparation est sélectionnée.

NOT Installed OR MaintenanceMode="Modify"

Pour exécuter une action uniquement pendant la désinstallation, utilisez la condition suivante :

REMOVE~="ALL"

Pour exécuter une action uniquement pendant la mise à niveau :

Installed AND NOT REMOVE

7voto

Une petite correction :

Enfin, pour exécuter une action uniquement pendant la désinstallation, utilisez la condition suivante : REMOVE="ALL"

Cela semble plus approprié car la propriété REMOVE contient les fonctionnalités en cours de désinstallation.
Donc si je fais une modification pour enlever une fonctionnalité, REMOVE est vrai et l'action qui devait s'exécuter uniquement lors de la désinstallation s'exécute lors de la modification.
Plus de détails ici sur MSDN

6voto

kristoffer_o Points 101

Un exemple :

<InstallExecuteSequence>
..
    <Custom Action="QtExecIdOfCA" Before="InstallFinalize">NOT Installed</Custom>
..
</InstallExecuteSequence>

..
..
<CustomAction Id="QtExecIdOfCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>

Avis ! La condition est ajoutée à la <Custom> et pas le site <CustomAction> cela m'a troublé, car Custom est suivi par Action attribue

5voto

Anand Choubey Points 73

Veuillez faire attention à REMOVE=ALL . Il n'est pas disponible avant la séquence installvalidate.
Et consultez les liens ci-dessous pour plus de détails :
http://msdn.microsoft.com/en-us/library/aa371194(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa368013(v=vs.85).aspx

1voto

Darren Clark Points 1489

Une condition sur l'action personnalisée, probablement avec une action personnalisée correspondante pour effectuer la désinstallation. Je ne sais pas quels outils vous utilisez, mais si l'installation secondaire est liée à un composant, j'utiliserais l'état de ce composant. Un état =3 signifie un état cible d'installation. Un état = 2 signifie un état cible absent. Notez que l'état ne sera pas défini s'il n'y a pas de changement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X