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

Minor Upgrade installiert im Advertise Mode


6 replies to this topic

MegDino

MegDino
  • Full Members
  • 47 posts

Posted 17 November 2008 - 13:28

Hallo zusammen!

Seit Tagen laufe ich einem Fehler hinterher, und habe jetzt womöglich den Grund gefunden, aber keine Lösung:

Ich habe drei Setups: Release 21, 24 und 25. Alle drei haben den gleichen ProduktCode, gleichen UpgradeCode UND gleichen PaketCode. Es ist Absicht gewesen, dass sie sich beim Aufruf wie ein und das selbe Produkt verhalten und der Wartungsmodus startet, wenn man z.Bsp. bei installierter Release 24 das Setup der 21 startet.

Nun bestand der Wunsch, mit Release 25 Minor Upgrades auf 21 und 24 durchführen zu können. Ich verwende hierzu den Aufruf des Installers mit REINSTALL=ALL und REINSTALLMODE=vomus.

Von 24 auf 25 klappt alles bestens, aber beim Versuch Release 21 upzugraden, macht der Installer nur eine Advertise-Installation. Das System steht zwar auf 25, aber die Dateien werden nicht aktualisiert.

Ich habe ein Log generieren lassen und für meine Feature folgenden Eintrag gesehen:
Feature: MainFeature; Installed: Advertise; Request: Reinstall; Action: Reinstall
Für die Komponenten steht folgendes im Log:
Component: Help; Installed: Local; Request: Null; Action: Null

Alle Features werden mit Release 21 wohl im Advertisemode installiert aber da die Komponenten local abgelegt werden, ist dies nie aufgefallen. Auch beim Ändern der 21 Version über das Wartungs-Setup steht nicht diese kleine gelbe eins vor dem MainFeature. Daher ist nie aufgefallen, dass hier ein Advertise vorliegt.
Nach dem Upgrade ist diese kleine gelbe Eins durchaus zu sehen und erst dadurch kam ich der Sache auf die Spur.
Dass das MinorUpgrade sich aber nun nach dem Feature-State der vorliegenden Version richtet, wundert mich, weil im Log folgendes steht:

CLIENT) MSI © (F8:08) [17:01:26:277]: Doing action: MigrateFeatureStates
(UNKNOWN) Aktion 17:01:26: MigrateFeatureStates. Feature-Zustände von verwandten Anwendungen werden migriert
(UNKNOWN) Aktion gestartet um 17:01:26: MigrateFeatureStates.
(CLIENT) MSI © (F8:08) [17:01:26:277]: Skipping MigrateFeatureStates action: not run in maintenance mode
(UNKNOWN) Aktion beendet um 17:01:26: MigrateFeatureStates. Rückgabewert 0.

Wenn ich nach dem missglückten Upgrade im Wartungsmodus von "Advertise" auf "lokal installiert" umstelle und installiere und danach nochmals im Wartungsmodus auf "Programm reparieren" gehe, ja dann sind die Dateien endlich auf dem aktuellen Stand.
Aber dieses Handling kann man ja keinem Kunden zumuten.

Kann ich im Setup Release 25 irgendetwas setzen oder einbauen, oder den Installer irgendwie so aufrufen, dass das Upgrade auf anhieb richtig gemacht wird, also nicht im Advertise-Modus? An den Alt-Setups kann ich leider nichts mehr drehn, weil die schon released und beim Kunden sind.

Ich nutze InstallShield 14 unter Windows XP SP3 und MS Installer 3.1. Die Lösung muss jedoch auch auf Win98 laufen (leider).

Schon mal vielen Dank und verzweifelte Grüße
Micha

MegDino

MegDino
  • Full Members
  • 47 posts

Posted 17 November 2008 - 17:11

Weitere Erkenntnisse:

Rufe ich das Update nicht mit REINSTALL=ALL sondern mit ADDLOCAL=ALL auf, lasse alles durchlaufen und starte danach nochmal mit REINSTALL=ALL, funktioniert alles wie gewollt. Leider lassen sich beide Properties so nicht in einem Aufruf kombinieren, weil REINSTALL immer ADDLOCAL "überschreibt".
Gibt es eine andere Möglichkeite, beides zu kombinieren, oder bei einem REINSTALL zu erwirken, dass er erst einen ADDLOCAL macht?

LG
Micha

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 19 November 2008 - 10:27

QUOTE
gleichen PaketCode

Keine gute Idee. Damit bewegst du dich außerhalb der Spezifikation, woraus "alle möglichen" Probleme entstehen können.
Wenn zwei MSI-Dateien nicht identisch sind, müssen Sie unterschiedliche PackageCodes haben.

MegDino

MegDino
  • Full Members
  • 47 posts

Posted 19 November 2008 - 10:38

QUOTE (Stefan Krueger @ 2008-11-19 10:27)
QUOTE
gleichen PaketCode

Keine gute Idee. Damit bewegst du dich außerhalb der Spezifikation, woraus "alle möglichen" Probleme entstehen können.
Wenn zwei MSI-Dateien nicht identisch sind, müssen Sie unterschiedliche PackageCodes haben.

Ja ich weiß. Ist aber leider nicht meine Entscheidung sad.gif Wie gesagt, bei vorliegender Installation und anschließendem Start eines älteren Setups, soll der Wartungsmodus kommen.
Hintergrund hierfür: Das besagt Setup ruft seinerseits ein anderes Setup auf, welches Datenbanken installiert, die zu jedem Zeitpunkt nachinstalliert werden können müssen (boah, was für ein Satz). Man muss somit auf eine neue Installation eine Datenbank aus dem Vorjahr installieren können und dazu muss die Wartungsinstallation starten. Und das ginge mit geändertem PaketCode nicht.

MegDino

MegDino
  • Full Members
  • 47 posts

Posted 19 November 2008 - 10:51

Zurück zum Problem:
Ich habe nun die API des Installers als Lösung für mein Problem entdeckt und eine eigene Setup.exe entwickelt, die zunächst das Update über...

MsiInstallProduct()

...startet und im Anschluss mit...

MsiQueryFeatureState()

...auf den Advertise-Modus prüft. Liegt dieser vor, rufe ich für das Feature...

MsiConfigureFeature(prodCode, featureName, INSTALLSTATE_LOCAL)

...auf und damti die Dateien dann auch wirklich aktualisiert werden noch:

MsiReinstallProduct( prodCode, REINSTALLMODE_FILEOLDERVERSION )

Umständlich, aber führt zum Erfolg.
Was mir nur zu bedenken gibt ist folgendes: Ich ging davon aus, dass das Setup Release 21 die Feature im Advertise installiert, weil ich den besagten Eintrag im Log gefunden habe. Wenn ich aber nun in meinem Setupprozess VOR dem Start des Update den Status der Feature abfrage, erhalte ich "INSTALLSTATE_LOCAL" zurück. An dieser Stelle ist der Installer also NICHT der Meinung, dass ein Advertise vorliegt.
Warum also, installiert er beim MinorUpgrade im Advertise Modus und schreibt inst Log, dass die Features bereits advertised vorliegen? dry.gif

Noch eine kleine Anmerkung für alle, die meine Lösung für ihre Probleme anwenden wollen:
Das Verhalten des Installers hängt (zumindest bei meinem Setup) stark vom UserInterface-Level ab. Bei Level "Basic" oder "None" hat das Update eine Wartungsinstallation aufgerufen, bzw. lief in der Installationsequenz in den Uninstall-Pfad. Erst mit UI-Level "Full" oder "Reduced" lief wirklich eine Installation, bzw. ein Upgrade im Sinne eines Minor Upgrade, ohne irgendwelche Uninstall-Aufrufe.
Also wer hier Probleme hat, einfach mal den UI-Level hochsetzen.

Grüße
Micha

ts1

ts1
  • Full Members
  • 81 posts

Posted 10 January 2010 - 18:43

QUOTE (MegDino @ 2008-11-19 10:51)
Warum also, installiert er beim MinorUpgrade im Advertise Modus und schreibt inst Log, dass die Features bereits advertised vorliegen?  dry.gif
Hallo Meg,

und als Hint für alle anderen Interessierten:
Mir ist das jetzt auch passiert, daß bei einem Minor Update auf einmal ein Feature als advertised im Logfile auftauchte, alle Dateien dieses Features nicht aktualisiert/installiert wurden. Dabei wurde es original garantiert nicht advertised installiert.
Ursache ist imho, daß ich neue Components zum Feature hinzugefügt hatte und trotzdem nur ein Minor Update gemacht habe (ja ich weiß, aber die Sachzwänge wie unbedingt beizubehaltener Product Code...).

Abhilfe für dieses Mal: die Dateien der ehemals neuen Component einer bereits bestehenden Component unterschieben.

Edited by ts1, 10 January 2010 - 18:45.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 11 January 2010 - 09:31

Ich empfehle hingegen: entweder die regeln für ein Minor Update einhalten (z.B. keine Komponenten aus Features herauslöschen) oder ein Major Upgrade machen.

Komponenten hinzufügen sollte eigentlich funktionieren. Hast du im Log mal nach SELMGR Meldungen gesucht?