2009-02-11 28 views
68

Sono sicuro che questo è abbastanza facile, ma ho avuto un po 'di difficoltà con esso. Ho una azione personalizzata che esegue un programma di installazione diverso (non msi) durante l'installazione. Sfortunatamente, ho notato che esegue anche l'installer su UNinstallation!Come eseguire l'azione personalizzata solo in installazione (non disinstallare)

Ho esaminato le opzioni ma non riesco a capire come fermarlo. Se qualcuno potesse aiutarmi, sarei incredibilmente grato.

Inoltre, come si imposta un'azione personalizzata da attivare solo durante l'installazione di UN? Qualsiasi aiuto è molto apprezzato ragazzi!

+4

Per un riferimento: [** comune MSI Condizioni Cheat Sheet **] (http: // blog. flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html). –

risposta

154

Aggiungere una condizione all'azione in modo che sia attivata solo durante l'installazione, non la disinstallazione.

corsa azione solo durante l'installazione

NOT Installed AND NOT PATCH 

azione viene eseguito durante l'installazione e la riparazione

NOT REMOVE 

Esegui installazione iniziale solo:

NOT Installed 

Esegui installazione iniziale o quando la riparazione è selezionato.

NOT Installed OR MaintenanceMode="Modify" 

Per solo eseguire un'azione durante la disinstallazione utilizzare la seguente condizione:

REMOVE~="ALL" 

Per solo eseguire un'azione durante l'aggiornamento:

Installed AND NOT REMOVE 
+0

e per la modalità di reinstallazione? –

+1

@Rasa cosa intendi con la modalità di reinstallazione? Non c'è nulla di simile nel linguaggio di MSI, probabilmente stai cercando "Repair" (NON RIMUOVERE). Se si registra l'output MSI, è possibile vedere esattamente quali saranno i vari valori utilizzati nelle condizioni di cui sopra e determinare quale si adatta alla propria situazione. – saschabeaumont

+1

Che dire di Modifica? Esecuzione di un'azione solo quando una funzionalità viene disinstallata? Esecuzione di un'azione solo quando viene installata una funzione? Esecuzione di un'azione solo quando una funzionalità è riparata? –

0

Una condizione in un'azione personalizzata, probabilmente con un'azione personalizzata corrispondente per eseguire la disinstallazione. Non sono sicuro quali strumenti stai usando, ma supponendo che l'installazione secondaria sia legata a un componente, utilizzerei lo stato di quel componente. Uno stato di = 3 indica uno stato di destinazione installato. Uno stato = 2 indica uno stato obiettivo assente. Si noti che lo stato non verrà impostato se non vi è alcun cambiamento.

7

Un po 'di correzione:

Infine, per eseguire solo un'azione durante la disinstallazione utilizzare la seguente condizione: REMOVE="ALL"

Questo sembra più appropriato come proprietà REMOVE contiene le funzionalità che verranno disinstallati.
Quindi se eseguo una modifica per rimuovere una funzionalità, REMOVE è true e l'azione che doveva essere eseguita solo alla disinstallazione viene eseguita su modifica.
More details here on MSDN

+1

Grazie, è stato utile! – M3NTA7

6

Un esempio:

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

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

Avviso! Condizioni viene aggiunto al tag <Custom> e non il <CustomAction> mi confonde, perché personalizzato è seguito da Azione Attribué

Problemi correlati