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!
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
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
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
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
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.