2009-02-11 6 views
68

Ich bin mir sicher, dass das ziemlich einfach ist, aber ich habe irgendwie eine harte Zeit damit gehabt. Ich habe eine benutzerdefinierte Aktion, die bei der Installation ein anderes (nicht-msi) Installationsprogramm ausführt. Leider habe ich bemerkt, dass es auch das Installationsprogramm bei UNinstallation ausführt!Wie man benutzerdefinierte Aktion nur in der Installation ausführt (nicht deinstallieren)

Ich habe mir die Optionen angeschaut, aber ich kann nicht herausfinden, wie ich das stoppen kann. Wenn mir jemand helfen könnte, wäre ich unglaublich dankbar.

Wie kann ich eine benutzerdefinierte Aktion nur während der UNInstall-Funktion deaktivieren? Jede Hilfe wird sehr geschätzt Jungs!

+4

Nach Referenz: [** Allgemeine MSI Bedingungen Cheat Sheet **] (http: // blogs. flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html). –

Antwort

154

Fügen Sie eine Bedingung für die Aktion hinzu, sodass sie nur während der Installation ausgelöst wird, nicht bei der Deinstallation.

Aktion läuft nur während der Installation

NOT Installed AND NOT PATCH 

Aktion läuft während der Installation und

NOT REMOVE 

Run bei der Erstinstallation repariert nur:

NOT Installed 

Run bei der erstmaligen Installation oder wenn eine Reparatur ausgewählt.

NOT Installed OR MaintenanceMode="Modify" 

Um nur eine Aktion bei der Deinstallation ausführen Verwenden Sie die folgende Bedingung:

REMOVE~="ALL" 

Um nur eine Aktion während der Aktualisierung ausführen:

Installed AND NOT REMOVE 
+0

und für den Neuinstallationsmodus? –

+1

@Rasa was meinst du mit Neuinstallationsmodus? Das gibt es im MSI-Sprachgebrauch nicht, Sie suchen wahrscheinlich nach "Reparieren" (NICHT ENTFERNEN). Wenn Sie die MSI-Ausgabe protokollieren, können Sie genau sehen, welche Werte in den oben genannten Bedingungen verwendet werden, und herausfinden, welche für Ihre Situation geeignet ist. – saschabeaumont

+1

Was ist mit Ändern? Eine Aktion nur ausführen, wenn eine Funktion deinstalliert wird? Eine Aktion nur ausführen, wenn ein Feature installiert wird? Eine Aktion nur ausführen, wenn eine Funktion Repaired ist? –

0

Eine Bedingung für die benutzerdefinierte Aktion, wahrscheinlich mit eine passende benutzerdefinierte Aktion, um die Deinstallation durchzuführen. Sie sind sich nicht sicher, welche Tools Sie verwenden, aber wenn die sekundäre Installation an eine Komponente gebunden ist, würde ich diesen Komponentenstatus verwenden. Ein Zustand von = 3 bedeutet einen Zielzustand von installiert. Ein Zustand = 2 bedeutet einen Zielzustand von abwesend. Beachten Sie, dass der Status nicht festgelegt wird, wenn keine Änderung erfolgt.

7

Ein bisschen eine Korrektur:

Schließlich, um nur eine Aktion ausgeführt werden während der Deinstallation die folgende Bedingung verwenden: REMOVE="ALL"

Dieser geeignetere scheint, als Eigentum REMOVE die Features enthält deinstalliert werden.
Also, wenn ich eine Änderung, um eine Funktion zu entfernen, ist REMOVE ist wahr und die Aktion, die nur bei der Deinstallation ausgeführt wurde, wird bei Änderung ausgeführt.
More details here on MSDN

+1

Danke, das war hilfreich! – M3NTA7

6

Ein Beispiel:

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

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

Hinweis! Zustand wird dem <Custom> Tag und nicht die <CustomAction> es verwirrt mich, weil Gewohnheit von Aktion folgt Attribué

Verwandte Themen