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

Rollback für mitinstalliertes Produkt


5 replies to this topic

mayho33

mayho33
  • Full Members
  • 27 posts

Posted 04 November 2014 - 12:58

Hallo @ All!

 

in diesem Posting (http://forum.install...wtopic=21716=) ging es darum ein beliebiges Legacy-Setup in eine Basic-MSi zu packen und mitzuinstallieren. Das Problem habe ich gelöst (Siehe Posting oben), aber nun stoße ich auf ein neues Problem wo ich eure Hilfe brauche:

 

Z.B. VLC.Mediaplayer wird mit dem MSI mit installiert/deinstalliert.

 

Meine Frage: Wie kann ich den Return des Legacy-Setups abfangen und entsprechend einen Rollback verursachen wenn die Installation des Legacy-Setups abbricht. Dito beim Uninstall.

 

Rollback = Keine MSI-Installation, wenn das Legacy-Setup auch nicht installiert ist, keine Legacy-Installation (also wieder deinstallieren), wenn das MSI nicht installiert werden konnte.

 

Grundsätzlich funktioniert alles, aber manchmal kommt es vor, dass entweder das MSI installiert wurde aber VLC  (oder ein anderes Legacy-Installer-Produkt) nicht, bzw. das MSI wurde deinstalliert, aber das mit installierte Produkt nicht.

 

Danke für die Unterstützung!

 

Mayho

 

 



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 10 November 2014 - 11:43

Bin etwas verwirrt. Zumindest bei MSI ist zu unterscheiden zwischen Rollback (bei abgbrochener/fehlgeschlagener Installation) und Uninstall (z.B. wenn der Anwender später das Produkt wieder deinstalliert). Bei nicht-MSI Setups wird oft im Abbruch-Fall ebenfalls die Deinstallation aufgerufen.

Wenn du das non-MSI Setup als Custiom Action aufrufst und den Exit Code des non-MSI Setups abfangen willst, musst du noch was außenrum schreiben, weil MSI den Exit-Code einer exe nicht richtig auswerten kann (alles was nicht 0 ist wird als Fehler gewertet). Alternativ könntest du VLC als Prerequisite installieren.

Bei der Deinstalaltion des Hauptprodukts werden Prerequisites üblicherweise nicht mit entfernt, weil du ja nicht weißt ob inzwischen jemand anderes auch den VLC braucht.



mayho33

mayho33
  • Full Members
  • 27 posts

Posted 17 November 2014 - 11:02

Danke für die Rückmeldung!

 

Eventuell habe ich mich etwas unklar ausgedrückt. Install/Uninstall bezieht sich auf das MSI. Wenn ich also z.B. VLC mit "installiere", das Setup von VLC aber einen Fehler verursacht, soll das MSI nicht weiter installiert werden sondern einen Rollback machen, sprich, schlussendlich auch nicht installiert sein. Das gleich auf dem umgekehrten Weg beim Deinstallieren der MSI (hier wird gleichzeitig die Deinstallation von VLC durchgeführt).

 

Es kam halt manchmal vor, dass die MSI installiert war, VLC aber nicht bzw. die MSI deinstalliert wurde, VLC aber nicht. Passierte aber immer, wenn die Condition zu früh "greift"

 

Eventuell liegt der Fehler in meiner Logik (ganz sicher sogar?). Hier die wesentlichen Schritte:

 

a ) CustomAction (Launch an exe; installed with the product) Install Exec Sequence => After InstallFinalize => Not Installed & Admin Exec Sequence => After InstallFinalize => Not Installed

b ) CustomAction (run vbscript; stored in custom action): sucht nach dem UninstallString für das Produkt und speichert diesen in einem Property USTRING

c ) CustomAction (Launch an exe; stored in property table): Install Exec Sequence => After InstallValidate => USTRING AND REMOVE~="ALL" & Admin Exec Sequence => After InstallValidate=> USTRING AND REMOVE~="ALL"

 

 

Das funktioniert grundsätzlich. Nur wie fange ich eventuelle Fehler ab? Wie bekomme ich den ReturnCode des Legacy-Setup zurück, wenn ich es nicht via Script de/installiere sondern via Schritte A & C?

Was muss ich tun damit das MSI entsprechend dem Fehler reagiert (VLC nicht installiert == MSI nicht weiter installieren bzw. VLC nicht deinstalliert == MSI nicht deinstallieren)?

 

Danke für die Hilfe!


Edited by mayho33, 17 November 2014 - 11:03.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 24 November 2014 - 15:38

Zunächst: nach InstallFinalize gibt es keinen Rollback mehr.

 

Windows Instalelr kann den Rückgabewert von exes nicht sinnvoll auswerten, du müsstest also was außenrum stricken.

 

Alternative wäre, den VLC als Prerequisite zu installieren. Da kann im Anschluss die Bedingung (vorhandensein eines Registry-Eintrags zum Beispiel) nochmal geprüft werden und bei fehlen (= VLC Setup fehlgeschlagen) die Installation des Haupt-Setup unterbunden werden.

 

Den VLC bei der Deinstallation auch wieder zu deinstallieren halte ich für problematisch. Beispiel:

Deine Applikation installiert den VLC.

Applikation XY benötigt ebenfalls den VLC. Er ist bereits vorhanden - prima.

Deine Applikation wird deinstalliert.

Applikation XY funktioniert nicht mehr, und dein setup hat sie kaputt gemacht.



mayho33

mayho33
  • Full Members
  • 27 posts

Posted 24 November 2014 - 18:07

Zunächst: nach InstallFinalize gibt es keinen Rollback mehr.

 

OK! gecheckt!

Windows Instalelr kann den Rückgabewert von exes nicht sinnvoll auswerten, du 
müsstest also was außenrum stricken.

Also etwa ein Script das mein Setup aufruft und je nach Erfolg oder Misserfolg (result = objshell.run <mein Setup>0, true) gebe ich das result zurück (bsp. in ein weiteres Property).

Alternative wäre, den VLC als Prerequisite zu installieren. Da kann im Anschluss 
die Bedingung (vorhandensein eines Registry-Eintrags zum Beispiel) nochmal 
geprüft werden und bei fehlen (= VLC Setup fehlgeschlagen) die Installation des 
Haupt-Setup unterbunden werden.

Wäre eine Möglichkeit. Danke! Wie bekomme ich dann aber das Prerequisite in mein Setup gepackt oder zumindest in eine CAB?

Den VLC bei der Deinstallation auch wieder zu deinstallieren halte ich für 
problematisch. Beispiel:
Deine Applikation installiert den VLC.
Applikation XY benötigt ebenfalls den VLC. Er ist bereits vorhanden - 
prima.
Deine Applikation wird deinstalliert.
Applikation XY funktioniert nicht mehr, und dein setup hat sie kaputt 
gemacht.

Ja, da kann ich nicht widersprechen, diese Abhängigkeiten gibt es soweit meine Erfahrung reicht bei Redistributables, Dotnet FrameWork usw., wäre aber ein eher spezieller Fall bei Standallone-Produkten wie VLC, IrvanView, 7-Zip, usw.

 

 

Wir betreiben SCCM 2007 / 2012 und da passiert grundsätzlich nichts anderes. Da bei uns jedes Produkt (auch z.b. eine VC++ Redistributable...leider) eine TAG bekommt (je nach Installationsmethode mehr oder weniger umständlich, sprich, bei MSI mit Transform, bei Legacy-Setup mit RegKey, usw.), war der logische Schritt das ganze zu vereinheitlichen und, weil wir vertraglich eine Bringschuld haben nachzuweisen wer und wann diese Installation durchgeführt hat/wurde (SCCM-Log reicht nicht), haben wir entschieden dies auch für Installationen zu machen die außerhalb des SCCM aufgebracht werden, sprich, manuelles Setup durch den FirstLevel (Die klicken nur zu gerne das Setup und nicht das InstallationsScript).

 

Wenn diese menschlichen Fehler ausgeschlossen werden können, kann man dann auch behaupten: "Kein Tag? Na dann kommt's nicht von uns, sondern eventuell von einem User mit administrativen Rechten"

 

Soweit die Theorie.

 



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 24 November 2014 - 18:35

 

Also etwa ein Script das mein Setup aufruft und je nach Erfolg oder Misserfolg (result = objshell.run <mein Setup>0, true) gebe ich das result zurück (bsp. in ein weiteres Property).

Genau

 

 

Wäre eine Möglichkeit. Danke! Wie bekomme ich dann aber das Prerequisite in mein Setup gepackt oder zumindest in eine CAB?

Prerequisites gehen nur mit setup.exe (also keine Option wenn du eine pure msi Datei brauchst). Bei den release-Einstellungen kannst du wählen, ob die Prerequisites mit in die setup.exe eingepackt werden sollen.