
CustomAction "starten eines weiteren MSI-Pakets"
Posted 13 September 2011 - 09:10
Ich habe ein Problem mit einer CustomAction.
Ich habe eine Aktion erstellt die ein weiteres MSI-Paket installieren soll. Das Funktioniert soweit ganz gut. Das zweite Produkt wird installiert.
Jedoch wenn man das eingebettete MSI wieder entfernen möchte erhält man die Meldung "Diese Aktion ist nur zulässig für Produkte, die im Augenblick installiert sind."
Grundlegend möchte ich ein Sub-Setup (MSI) zusätzlich zum Haupt-Setup installieren.
Das Sub-Setup soll nicht abhängig vom Haupt-Setup sein.
Wenn das Haupt-Setup deinstalliert wird soll das Sub-Setup jedoch erhalten bleiben und ebenso auch andersrum.
Folgende Einstellungen habe ich in der CustomAction vorgenommen:
MSI-Dateiname: <ISProjectFolder>\xxx\xxx.msi
Eigenschafteneinstellungen: ALLUSERS=[ALLUSERS] ADDLOCAL=ALL
Verarbeitung des Rückgabewerts: Synchron (Exit-Code ifnorieren)
Ausführungsplanung: immer ausführen
Installations-UI-Sequenz: Fehlt in Sequenz
Installationsausführungssequenz: Nach InstallFinalize
Angebotssequenz: Fehlt in Sequenz
Admin-UI-Sequenz: Fehlt in Sequenz
Admin-Ausführungsseguenz: Fehlt in Sequenz
MSI-Typnummer: 71
Kann mir da jemand helfen?
Posted 13 September 2011 - 15:57
Eine 2. Möglichkeit wäre natürlich auch ein Prerequisite zu erstellen und dies beim Start der Installation ausführen, oder als Feature-Prerequisite kurz vorm Ende der UI-Sequenz.
Edited by ali, 13 September 2011 - 15:59.
Posted 14 September 2011 - 08:02
QUOTE ("ali") |
Wenn ich dich richtig verstanden habe, möchtest du das 2. Setup nur aufrufen wenn du das Msi installierst und nicht mehr wenn du deinstallirst. Du solltest also deiner Custom Action die Auführungsbedingung "Not Installed" ohne die " hinzufügen. |
Jain... Zum einen möchte ich das was du sagst zum anderen möchte ich aber auch dass ich das 2. Setup wieder deinstallieren kann ohne dafür das 1. anzufassen. Im Moment habe ich das Problem dass die beiden Installationen gekoppelt zu sein scheinen. Ich kann das 2. Setup nur deinstallieren wenn ich das 1. deinstallier. Fasst das "Not Installed" das mit ein?
QUOTE ("ali") |
Eine 2. Möglichkeit wäre natürlich auch ein Prerequisite zu erstellen und dies beim Start der Installation ausführen, oder als Feature-Prerequisite kurz vorm Ende der UI-Sequenz. |
Stimmt an die Variante habe ich nicht gedacht. (Weil ich es auch noch nie gemacht hab) Hast du vielleicht einen Link zu einem tutorial für die Prerequisites?
Posted 14 September 2011 - 09:30
Die eine Möglichkeit habe ich ja schon genannt, also entweder Prerequisite oder auch Feature-Prerequisite. InstallShield hat einen Prerequisite Editor, den man im Menü "Tools" aufrufen kann. Hier ein bisschen zu lesen in der Help Library
Prerequisite Editor
Setup Prerequisites vs. Feature Prerequisites
Ich selbst nutze Feature-Prerequisite und wir haben hier kaum Probleme, nur vereinzelt durch Sicherheitstools die wohl manchmal den Aufruf verhindern.
Eine 2. Möglichkeit die ich auch einsetze ist eine andere CA Type 226 "launch an executeable". Diese am Ende der Installation (nach InstallFinalize) ausführen mit dem Aufruf z.B.
[SystemFolder]msiexec.exe /x [PRODUCTCODE] /qb!
So könntest du zb. ein als Feature Prerequisite installiertes MSI wieder deinstallieren. Den Productcode einfach mit der Installation in die Registry schreiben und dann über SystemSearch wieder auslesen. Aber genauso könntest du auch auf diesem Weg ein MSI installieren.
Ich wünsche viel Erfolg.
Edited by ali, 14 September 2011 - 09:32.
Posted 14 September 2011 - 10:35
Dafür ne Lösung?
Posted 14 September 2011 - 11:05
Posted 14 September 2011 - 14:41
Posted 14 September 2011 - 14:58
Posted 16 September 2011 - 09:07
QUOTE ("ali") |
Eine 2. Möglichkeit die ich auch einsetze ist eine andere CA Type 226 "launch an executeable". Diese am Ende der Installation (nach InstallFinalize) ausführen mit dem Aufruf z.B. [SystemFolder]msiexec.exe /x [PRODUCTCODE] /qb! |
Hi Ich wollte es jetzt mal auf dem 2. Wege versuchen. Dazu habe ich aber noch ein paar Fragen.
Was trage ich bei "Arbeitsverzeichnis" ein und was bei "[PRODUCTCODE]"?
Posted 16 September 2011 - 09:15
das ist ja ein Beispiel für éine Deinstallation.
Bei Working Directory kommt "SystemFolder" hin.
Das Property PRODUCTCODE enthält den Produktcode des MSI Paketes das deinstalliert werden soll. Den Wert erhält man z.B. dadurch das man den Produktcode während der Installation in die Registry schreibt und dann bei der Deinstallation diesen über SystemSearch sucht und in das Property PRODUCTCODE speichert.
Posted 16 September 2011 - 09:46
Ich hab jetzt schon versucht das 2. msi in die Binarytabelle zu packen aber das wird dann nicht mal ausgeführt.
Posted 16 September 2011 - 13:46
Ich würde an deiner Stelle auf Prerequisites gehen.