bisherige Version (InstallScript-Projekt, erstellt mit einer 7er InstallShield Version):
2 Features, die aus je einer Komponente bestehen. 1 Komponente legt mittels des Eintrages "Registrierungsdaten" einen Registry-Pfad mit drei leeren Werten an. Im InstallScript wird unter diesem Schlüssel mittels RegDBSetKeyValueEx ein 4. (nicht leerer) Wert eingetragen.
Upgrade (InstallScript-Projekt mit InstallShield Developer 8.0):
Weiterhin 2 Features. Das erste wie gehabt mit einer Komponente plus einer zusätzlichen Komponente, die einen zusätzlichen Registry-Eintrag an anderer Stelle vornimmt. Das 2. Feature soll nun aus 3 Komponenten bestehen: Einer für den zusätzlichen Registry-Eintrag (wie in erstem Feature), einer die eine Datei kopiert und keine Registry-Einträge vornimmt und einer, die ähnlich zu bisher, alle 4 Werte in der Registry eintragen soll (diese hat die gleiche GUID wie die bisherige Komponente dieses Features). Den Registry-Werten habe ich eine Property (mit [ ]) hinzugefügt.
Als Upgrade-Typ habe ich Haupt-Upgrade gewählt, mit der Einstellung "komplette Deinstallation und dann Neuinstallation". Der Upgrade-Code beider Versionen ist der gleiche, den Produkt-Code habe ich geändert.
Im InstallScript führe ich bei OnBegin() GetRegGPL für alle Registry-Werte aus und direkt im Anschluss ein MsiSetProperty. Während des Upgrades wird einer der Werte mittels MsiSetProperty erneut gesetzt.
Wenn ich nun das Upgrade durchführe geht bis zum Ende-Bildschirm alles gut, die Registry enthält alle Werte korrekt. Wenn ich nun auf "Fertigstellen" klicke, wird noch OnEnd abgearbeitet und auch dabei ist noch alles in Ordnung (letzte Anweisung war testweise MessageBox, so dass ich Registry anschauen konnte). Aber dann passiert das, was ich nicht kapiere und auch nach vielen Versuchen mit zusätzlichen Komponenten für die Registry-Eintrge und diversen Einstellungen nicht in den Griff bekomme: Der eine Registry-Wert, der in der alten Version mittels RegDBSetKeyValueEx gesetzt wurde, verschwindet (nicht nur der eingetragene Wert, sondern der komplette Eintrag) (und ich habe über das Script keinen Einfluss mehr drauf, da ja OnEnd() bereits abgearbeitet ist).
Wenn ich nun das Setup ein zweites Mal aufrufe und "Reparieren" wähle, wird der Eintrag zwar wieder angelegt, aber er ist natürlich leer.
Hat irgendjemand eine Idee, an was das liegen könnte bzw. was ich tun kann, damit auch dieser Registry-Eintrag erhalten bleibt?
(Ich hoffe, ich habe einigermaßen verständlich beschrieben, was ich mache und was ich will.
