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

Bedingung für Aktion bei Major Upgrade


2 replies to this topic

asSiDeluxE!

asSiDeluxE!
  • Full Members
  • 17 posts

Posted 17 August 2006 - 16:11

Hallo alle zusammen,

ich bin mir nicht ganz sicher, ob dies hier das richtige Forum ist, da mein Problem eine Kombi aus Script und Basic MSI ist, aber da es hier um die Aufrufbedingung der Aktion geht, denke ich, hier bin ich richtig :-)


Nun zum Problem:
Also, habe ein Setup erstellt, dass sowohl für eine Neuinstallation als auch als ein Major Upgrade für vorherige Versionen gedacht ist. Ich habe ein Upgrade Element hinzugefügt und dieses so eingestellt, dass ein kompletter Remove stattfindet bevor die neue Version installiert wird. Es funktioniert auch alles super. Altes Produkt wird erkannt, entfernt usw.
Das Problem ist eine benutzerdefinierte Aktion. Und zwar rufe ich zum Ende des Setups diese Aktion auf. Es handelt sich dabei um ein Installscript, welches fragt ob es Acrobat Reader installieren soll und es auch tut falls AskYesNo = YES. Als Ausführungsbedingung für diese Aktion habe ich..::|REMOVE<>"ALL" and Not Installed|::.. gesetzt. Ich hatte mir erhofft, dass diese Aktion dann weder beim Updaten noch beim Deinstallieren sondern nur bei der Neuinstallation ausgeführt wird.
Anscheinend ist aber Installed garnicht gesetzt. Er will diese Aktion bei der Ausführung des Major Upgrades auf jeden Fall immer durchführen. Beim Deinstallieren lässt er es wie gewollt bleiben.

Ich habe auch die folgenden Properties schon versucht:

UpdateStarted
ISACTIONPROP1 (vom Upgrade Element angelegt für erkannten ProductCode)
UPGRADINGPRODUCTCODE



Hat jemand noch einen Tip? Was kann ich tun, damit diese Aktion wirklich nur bei der Neuinstallation ausgeführt wird?


Bin für jede Hilfe dankbar!


Grüße
Jan


p.s.: Installshield Developer 8.0 SP1 ist im Einsatz....

Edited by asSiDeluxE!, 17 August 2006 - 16:18.


Dominik Oberlin

Dominik Oberlin
  • Full Members
  • 12 posts

Posted 17 August 2006 - 19:47

Hallo asSiDeluxE
Wenn Du die Condition 'REMOVE<>"ALL" and Not Installed' setzt, wird die Action nur dann nicht ausgeführt, wenn es sich nicht um einen REMOVE handelt und dieses Produkt nicht installiert ist. Im Falle der Erstinstallation dieses MajorUpgrades (RTM) wird die Action auf jeden Fall ausgeführt, auch wenn ein Vorprodukt, welches Du via RemoveExistingProduct über den UpgradeCode entfernen willst auf dem System vorhanden ist. Für Windows Installer handelt es sich um ein eigenständiges Produkt!
Schaue in der Upgrade Table der MSI, welche ActionProperty Du für Dein zu deinstallierendes Vorprodukt ('UpgradeCode') verwendest und setze diese als Condition Deiner CustomAction:

CODE
Beispiel:
Condition

'NOT REMOVE AND NOT Installed AND NOT OLDPRODUCT'


'OLDPRODUCT' ist dabei mit Deiner vorgefundenen (Upgrade Table) Public Property zu ersetzen! So führt Windows Installer diese Action nur noch aus, wenn der MajorUpgrade weder installiert ist, noch das Vorprodukt vorgefunden werden konnte.
Falls Deine CustomAction vor RegisterProduct in der InstallExecuteSequence ausgeführt würde, kannst Du sogar auf den Teil 'NOT REMOVE' verzichten, da das Entfernen von Produkten deren erfolgreiche vorgängige Installation voraussetzt und dieser Zustand bereits mit 'NOT Installed' abgefragt wäre.
Beachte, dass eingebettete Installationen nicht empfohlen sind (Patches können auf nested Installations nicht angewendet werden, eingebettete Installationen werden in den Konfigdaten des Basisproduktes gespeichert). Die elegantere Lösung wäre die Verwendung eines Bootstrappers, der diese Aufgabe übernimmt.

Edited by Dominik Oberlin, 18 August 2006 - 08:20.


asSiDeluxE!

asSiDeluxE!
  • Full Members
  • 17 posts

Posted 21 August 2006 - 10:20

Danke,

ISACTIONPROP1 war wie vermutet die Property, in der der Upgrade Code drinsteht. Diese kann man gut heranziehen.
Ich habe die Bedingung nun so gesetzt wie in deinem Code Beispiel und es funzt...

Danke nochmal!





Grüße
Jan