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

Problem mit Registry-Einträgen bei Upgrade


6 replies to this topic

satura

satura
  • Members
  • 8 posts

Posted 17 December 2004 - 10:12

Ich möchte ein Major Upgrade bei folgender Konstellation durchführen:

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. huh.gif )

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 18 December 2004 - 09:23

Der Projekttyp "InstallScript MSI" ist problematisch, besonders bei Upgrades, und sollte vermieden werden. Was du beschreibst klingt nach diesem bekannten Bug, der angeblich in DevStudio 9 SP1 behoben sein soll:
http://support.insta...ticleid=Q107649


satura

satura
  • Members
  • 8 posts

Posted 20 December 2004 - 09:25

Hi Stefan,
danke für den Tipp smile.gif sieht ganz so aus, als wär das mein Problem. Ich hatte zwar auch schon bei InstallShield gesucht, aber nichts passendes gefunden. Besteht das Problem eigentlich immer noch (oder wieso schreibst du "angeblich")?

Sollte der Projekttyp "InstallScript MSI" generell vermieden werden oder nur in den älteren Versionen von InstallShield (wir werden in Kürze auf 10.5 updaten)? Und falls ja, wieso sollte dieser Projekttyp vermieden werden?

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 21 December 2004 - 09:30

"angeblich" weil:
- In dem KB Artikel steht "This issue is scheduled to be addressed in DevStudio SP1", d.h. es ist (war) GEPLANT das problem in 9.01 zu beheben. Es steht nicht da, dass es tatsächlich behoben wurde.
- Die Work Order #1-9UXHF habe ich sonst nirgends gefunden. Normalerweise müsste sie in den Release Notes zu 9.01 als Fix aufgelistet sein.
- Ich verwende "InstallScript MSI" nicht, deshalb weiss ich nicht, ob der Fehler wirklich behoben wurde.

Ich vermeide InstallScript MSI, weil
- es prinzipbedingt (durch die Verheiratung von zwei Setup-Technologien) immer Konflikte und Probleme gibt.
- es für fast alle Aktionen zwei Möglickiten gibt (Script und MSI) und das verwirrend und fehlerträchtig ist.
- es Probleme mit Updates (Minor, Major, Patches) gab und wohl auch noch gibt.
- wesentliche Vorteile von MSI wegfallen, etwa die Möglichkeit, das Paket per Active Directory zu verteilen, oder die Möglichkeit, dass ein Administrator in das Paket hinschaut um zu sehen, was es macht
- immer die InstallScript Engine mit installiert werden muss, was nicht nur das Setup größer macht, sondern auch immer wieder zu undurchsichtigen Fehlern (z.B. 1607) führt.

Die meisten Probleme sind grundsätzlicher Natur und daher letztlich nicht zu beheben. Das hat auch InstallShield erkannt und schlägt seit Version 8 oder 9 InstallScript MSI nicht mehr als Projekttyp für neue Projekte vor.

satura

satura
  • Members
  • 8 posts

Posted 21 December 2004 - 09:47

Danke für deine Hilfe!

Ich habe übrigens zwischenzeitlich eine Evaluierungsversion von InstallShield 10.5 Professional (German) installiert und siehe da - mein Setup funktioniert einwandfrei (zumindest an dieser Stelle wink.gif ).

Das Problem, das jetzt auftritt besteht darin, dass bei einem erneuten Aufruf von setup.exe als erstes die bisher installierte Version meiner Software deinstalliert wird (noch bevor der Hinweis kommt, dass ich die Evaluierungsversion einsetze). Dadurch sind natürlich auch meine bisherigen Einstellungen und Registry-Einträge weg und mir bleibt nichts anderes übrig, als die Software neu zu installieren. Selbst wenn ich die zweite Installation bei der ersten Möglichkeit abbreche, ist die vorher installierte Software sauber deinstalliert.

Wenn ich über die Systemsteuerung und Software gehe, wird hingegen ganz normal der Maintenance-Dialog aufgerufen.

Ist dir hier etwas bekannt (bei InstallShield.com habe ich nichts gefunden)?

(Vielleicht sollte ich es ja doch einmal mit einem Basic-Projekt versuchen und hoffen, dass dort dieses Problem nicht auftritt)

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 21 December 2004 - 10:01

Ich vermute, du startest die Installation aus der Entwicklungsumgebung heraus? Es gibt dort eine Einstellung (in der englischen Version unter Tools > Options > Registerkarte Preferences > Uninstall before installing) mit der die IDE zunächst eine Deinstallation ausführt, damit du nicht bei jedem Test in den Maintenance Mode läufst. Wenn du das Setup aber normal (über die setup.exe) startest, sollte das nicht auftreten. Wenne s dich stört, kannst du die Option auch einfach abschalten. (Kein Rebuild erforderlich, die Option betrifft nur die IDE, nicht dein Setup)

satura

satura
  • Members
  • 8 posts

Posted 21 December 2004 - 10:47

Das war's! Manchmal kann es so einfach sein. smile.gif
Ich hatte zwar zwischendurch auch mal das Setup per Doppelklick auf setup.exe gestartet, aber offensichtlich nur bei der Erst-Installation.
Hab nochmals vielen Dank für deine Unterstützung, Stefan! smile.gif