Hallo,
ich habe mal wieder ein Problem an dem ich mir die Zähne ausbeisse
Ich habe ein Setup (Major Upgrade) das bei der Installation die Nutzereinstellungen sichert, damit dem Nutzer nichts verloren geht. Bei jeder der folgenden CA handelt es sich um ein InstallScript.
1. Schritt, ich ermittle mittels einer CA erst das Verzeichnis in dem die Einstellungen gesichert sind und speichere das in einer Property USERDIR.
2. Schritt, in einer weiteren CA (saveDir) lese ich die Property aus und gebe dem Verzeichnis einen temporären Namen, so das es nicht gelöscht wird.
3. Schritt, Installation der neuen Daten und deinstallation der alten.
4. Schritt, zuletzt kommt eine weitere CA (restoreDir) zum Zuge, die wieder die Property ausliest und den Namen des temporären Verzeichnis korrigiert.
Klappt soweit sehr gut. Mein Problem tritt auf, wenn der User während des 3. Schritts die Installation abbricht. Die Daten werden zwar alle wiederhergestellt, nur muss ich auch das Verzeichnis wieder umbennen. Dazu habe ich noch eine CA erstellt, In-Script Execution auf 'Rollback Execution' gestellt und da rufe ich die gleiche Funktion auf, wie in Schritt 4. Nur ist jetzt die Property immer leer, wenn ich sie auslese.
Das Logfile bringt mich nicht wirklich weiter und debuggen lässt sich ein Rollback wohl nicht. Wo ist mein Fehler?
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.
MsiGetProperty beim Rollback
Started by
macman
, Mar 16 2009 11:22
3 replies to this topic
Posted 16 March 2009 - 14:59
hört sich so ein bischen nach einem Problem mit CustomActionData an. Wann werden die Aktionen denn genau ausgeführt. Wenn zwischen InstallInitalize und InstallFinalize dann wird's wohl so sein.
Posted 17 March 2009 - 14:43
Eine Deferred Execution Custom Action, zu der natürlich auch die Rollback-CA gehört kann nicht auf alle Elemente der Installationssession zugreifen. Ein Zugriff mit GetProperty() auf die Eigenschaft "USERDIR" gibt immer NULL zurück, da diese Infos nicht verfügbar sind. Es ist erforderlich, die Eigenschaften die von einer solchen CA verwendet werden sollen in das Installationsskript zu übertragen. Hierfür eigenet sich eine CA vom Typ 51. In der Deffered Execution CA kann dann mit GetProperty() auf "CustomActionData" zugegriffen werden, indem die Werte vorhanden sind. Das Ganze ist im SDK unter http://msdn.microsof...543(VS.85).aspx erläutert.
Viele Grüße
Andreas
Viele Grüße
Andreas
Andreas Kerl
Inside Windows Installer 4.5
ISBN 3-86645-431-7
Posted 19 March 2009 - 11:56
Danke. Ihr hattet Recht und mit CustomActionData habe ich es hinbekommen. Zum Glück brauche ich bisher nur eine Variable