Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

CustomAction "starten eines weiteren MSI-Pakets"


11 replies to this topic

Proto

Proto
  • Full Members
  • 33 posts

Posted 13 September 2011 - 09:10

Hi Forum,

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?


ali

ali
  • Full Members
  • 1,008 posts

Posted 13 September 2011 - 15:57

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.

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.


Proto

Proto
  • Full Members
  • 33 posts

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?

ali

ali
  • Full Members
  • 1,008 posts

Posted 14 September 2011 - 09:30

Oh, ich sehe gerade du verwendest ein CA "Launch another MSI package" Type 71, da wirst du keine Freude mit haben. Wieso es das überhaupt noch gibt, wird mir ein ewig Rätzel bleiben verursacht nix als Probleme beim Kunden.

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.


Proto

Proto
  • Full Members
  • 33 posts

Posted 14 September 2011 - 10:35

Ok ich werd es mit einem Prerequisite versuchen. Jedoch habe ich im Moment noch immer das Problem, dass sich das 2. Setup nicht mehr deinstallieren lässt.
Dafür ne Lösung?

ali

ali
  • Full Members
  • 1,008 posts

Posted 14 September 2011 - 11:05

das 2. Setup, das jetzt nicht deinstalliert werden kann, wurde ja vermutlich über diese CA Type 71 installiert. Das ist ja gerade eben eines der Probleme die man über diese Child Funktionaliät hat, dass man das Child MSI evtl. installiert bekommt aber das Child dann an des Haupt-Msi gebunden ist und somit nur mit dem Hauptsetup deinstalliert werden kann. Funktioniert das nicht dann hast du ein Problem mit diesem 2. MSI und dann kannst du so wie ich die Erfahrung gemacht habe dieses 2. MSI nur durch abmelden des MSI in der Registry oder manuelles bereinigen entfernen. Hast du diese Child-MSI schon an Kunden verteilt oder liegt das eben noch im Test?

Proto

Proto
  • Full Members
  • 33 posts

Posted 14 September 2011 - 14:41

Liegt noch im Test. Ich suche im Moment eine Methode mit der ich das gewünschte Verhalten abbilden kann.

ali

ali
  • Full Members
  • 1,008 posts

Posted 14 September 2011 - 14:58

ok, also wenn man das 2. MSI über Prerequisite oder die von mir genannte CA installiert, wird das 2. Setup nicht an das Hauptsetup gebunden und es kann auch unabhängig vom 1. Setup deinstalliert repariert oder aktualisiert (Patch) werden.

Proto

Proto
  • Full Members
  • 33 posts

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]"?

ali

ali
  • Full Members
  • 1,008 posts

Posted 16 September 2011 - 09:15

Hallo,
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.

Proto

Proto
  • Full Members
  • 33 posts

Posted 16 September 2011 - 09:46

Ach so, für die deinstallation. Deinstallieren möchte ich das 2. Setup garnicht über das 1. Setup. Ich möchte nur installieren.

Ich hab jetzt schon versucht das 2. msi in die Binarytabelle zu packen aber das wird dann nicht mal ausgeführt.

ali

ali
  • Full Members
  • 1,008 posts

Posted 16 September 2011 - 13:46

also installieren geht besser über Prerequisite oder Feature Prerequisite. Über die oben genennte Funktion mit der CA besteht das Problem, das das MSi ja je nachdem wie es eingepackt wurde (also zb. über SupportedFiles) nach InstallFinalize wieder aus dem Temp Folder gelöscht wird, weil dann das Install Cleanup läuft. Ein Aufruf wird dort ins leere führen, es sei denn man bastelt sich was aus ISScript oder eine DLL was aussenrum.
Ich würde an deiner Stelle auf Prerequisites gehen.