web-dev-qa-db-fra.com

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

Je suis sûr que c'est assez facile, mais j'ai eu du mal avec ça. J'ai une action personnalisée qui exécute un programme d'installation différent (non-msi) lors de l'installation. Malheureusement, j'ai remarqué qu'il 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 extrêmement reconnaissant.

De plus, comment définir une action personnalisée pour qu'elle se déclenche uniquement lors de la désinstallation? Toute aide est grandement appréciée les gars!

72
Cyprus106

Ajoutez une condition à l'action afin qu'elle ne se déclenche que lors de l'installation, pas de la désinstallation.

Action exécutée uniquement pendant l'installation

NOT Installed AND NOT PATCH

L'action s'exécute pendant l'installation et la réparation

NOT REMOVE

Exécuter sur l'installation initiale uniquement:

NOT Installed

Exécuté 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
163
saschabeaumont

Un peu de 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 supprimer 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

7

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"/>

Remarque! La condition est ajoutée au <Custom> tag et pas le <CustomAction> cela m'a dérouté, car Personnalisé est suivi par Attribuer action

6
kristoffer_o

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

5
Anand Choubey

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 en supposant que l'installation secondaire est liée à un composant, j'utiliserais cet état de composant. Un état = 3 signifie un état cible d'installation. Un état = 2 signifie un état cible d'absence. Notez que l'état ne sera pas défini s'il n'y a aucun changement.

1
Darren Clark