2009-02-11 12 views
68

Je suis sûr que c'est assez facile, mais j'ai eu un peu de 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 sur UNinstallation!Comment exécuter une action personnalisée uniquement en installant (pas désinstaller)

J'ai regardé à travers les options, mais je ne peux pas "sembler savoir comment arrêter ceci. Si quelqu'un pouvait m'aider, je serais incroyablement reconnaissant.

De même, comment définir une action personnalisée pour qu'elle se déclenche uniquement pendant l'installation de UN? Toute aide est grandement appréciée les gars!

+4

ATTRIBUÉS Pour référence: (http [** Fiche Conditions MSI commune Cheat **]: // blogs. flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html). –

Répondre

154

Ajoutez une condition à l'action afin qu'elle soit uniquement déclenchée lors de l'installation, et non lors de la désinstallation.

action Courez uniquement lors de l'installation

NOT Installed AND NOT PATCH 

action fonctionne lors de l'installation et la réparation

NOT REMOVE 

Exécuter sur l'installation initiale seulement:

NOT Installed 

Exécuter sur l'installation initiale ou lorsque la réparation est choisi.

NOT Installed OR MaintenanceMode="Modify" 

Pour exécuter uniquement une action lors de la désinstallation utiliser la condition suivante:

REMOVE~="ALL" 

Pour ne lancer une action au cours de mise à niveau:

Installed AND NOT REMOVE 
+0

et pour le mode de réinstallation? –

+1

@Rasa que voulez-vous dire par le mode de réinstallation? Il n'y a pas une telle chose dans le langage MSI, vous êtes probablement à la recherche de "Repair" (PAS RETIRER). Si vous consignez la sortie MSI, vous pouvez voir exactement quelles sont les valeurs utilisées dans les conditions ci-dessus et déterminer laquelle correspond à votre situation. – saschabeaumont

+1

Qu'en est-il de Modifier? Exécuter une action uniquement lorsqu'une fonctionnalité est désinstallée? Exécuter une action uniquement lorsqu'une fonctionnalité est en cours d'installation? Exécuter une action uniquement lorsqu'une fonctionnalité est réparée? –

0

Une condition sur l'action personnalisée, probablement avec une action personnalisée correspondante pour effectuer la désinstallation. Vous ne savez 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 de = 3 signifie un état cible de installé. Un état = 2 signifie un état cible d'absent. Notez que l'état ne sera pas défini s'il n'y a pas de changement.

7

Un peu d'une correction:

Enfin, pour n'exécuter une action lors de la désinstallation utilisent la condition suivante: REMOVE="ALL"

Cela semble plus approprié que la propriété REMOVE contient les fonctions en cours de désinstallation.
Donc, si je fais une modification pour supprimer une fonctionnalité, REMOVE est vrai et l'action qui devait être exécutée uniquement lors de la désinstallation s'exécute sur modifier.
More details here on MSDN

+1

Merci, ça a été utile! – M3NTA7

6

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! condition est ajouté à la balise <Custom> et pas la <CustomAction> il me confus, parce que personnalisée est suivi par action

Questions connexes