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

Installation/Deinstallation von RegistryKeys


3 replies to this topic

ANo

ANo
  • Full Members
  • 179 posts

Posted 28 January 2010 - 14:57

Hallo , ich komme nicht weiter:
Mein Ziel ist eine saubere Installation/Deinstallation von RegistryKeys hinzukriegen.

Wir haben eine .NET-Komponente die in den GAC installiert, bei der COM Interop = ja gesetzt ist - und bei der noch zuätzliche RegistryKeys inst./deinst. werden.

Beim Setup-Build werden die die RegKeys dynamisch über eine Regdatei eingebunden.
Das funktioniert an sich.

Was passiert aber wenn die für Produkt 1.0 und Produkt 1.1 die Komponenten-GUID gleich bleibt, sich aber Rekeys geändert haben (z.B. anderer Versionsnummer).
- Installation = okay, beide Projekte parallel inst. fkt.
- Deinstallation --> einige RegKeys bleiben zurück

Was passiert aber wenn die für Produkt 1.0 und Produkt 1.1 die Komponenten-GUID verschieden ist, und sich nur einige Rekeys geändert haben (z.B. anderer Versionsnummer), aber nicht alle Regkeys.
- Bei der Deinstallation von einem Produkt werden für beide Produkte gleiche RegKeys entfernt.
Das noch installierte Produkt fkt. nicht mehr.
- Deinstallation = okay, das System ist sauber

Vielleicht kann mir jemand helfen?
Gruß
André


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 28 January 2010 - 16:54

Ich nehme an, wir sprechen hier von versionsabhängigen Registry-*Schlüsseln*, nicht -Werten.

Der Inhalt einer Komponente (dazu gehören auch die registry-Schlüssel) darf sich nicht ändern, sonst bleiben verwaiste Einträge zurück (wie du schon festgestellt hast). Außerdem darf die gleiche resource (z.B. Registry-Schlüssel) nicht in zwei verschiedenen Komponenten (identifiziert durch die ComponentId GUID) enthalten sein, sonst kommt die referenzzählung durcheinander (hast du auch schon gemerkt).

Die Lösung wäre, die Einträge auf verschiedene Komponenten zu verteilen - eine bei der sich der Inhalt nicht ändern und dann jeweils versionsabhängige mit unterschiedlichen GUIDs.

Wichtiger Hinweis für andere Leser, die Small oder Minor Updates planen: hier darf man auch keine Komponente aus dem Setup entfernen.

ANo

ANo
  • Full Members
  • 179 posts

Posted 29 January 2010 - 11:01

Hallo Stefan, vielen Dank für Deine Antwort.

(Okay, es ist also noch ein Unterschied ob man RegKeys oder RegValues betrachtet.)

Leider komme ich in der Sache nicht weiter. Und muß damit erst einmal leben, daß die Deinstallation nicht sauber verläuft. Aber die Installation und die Funktionalität ist gegeben.

Denn die Dinge liegen etwas komplizierter:

- Wir installieren eine Meine.dll Version 1.6.0.0 in den GAC, COM Interop=ja.
- Dabei wird die eingebettete Meine Type Library installiert.
- Mit der beim Compilieren des Quellcodes und in das Setup eingebundenen Regdatei wird diese Type Library + deren Interfaces registriert.
- Die RegValues für die Type Library und den Interfaces enthalten dabei die Versionsnummer.

Beispiel:
[HKEY_CLASSES_ROOT\TypeLib\{C9E15A43-8BF8-4B54-AA7B-594F0AF82EA6}\1.6]
@="Meine Type Library"

[HKEY_CLASSES_ROOT\TypeLib\{C9E15A43-8BF8-4B54-AA7B-594F0AF82EA6}\1.6\0]
...

[HKEY_CLASSES_ROOT\Interface\{033044F9-666F-3435-B0D8-2975C9F4EE1B}]
@="IControllerBase"

[HKEY_CLASSES_ROOT\Interface\{033044F9-666F-3435-B0D8-2975C9F4EE1B}\ProxyStubClsid]
@="{00020420-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Interface\{033044F9-666F-3435-B0D8-2975C9F4EE1B}\ProxyStubClsid32]
@="{00020420-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Interface\{033044F9-666F-3435-B0D8-2975C9F4EE1B}\TypeLib]
@="{C9E15A43-8BF8-4B54-AA7B-594F0AF82EA6}"
"Version"="1.6"

...

- Und jetzt kommt eine parallel installierte Version der DLL + Type Library ins Spiel.


Gruß + Danke + ich werde darüber noch grübeln
André


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 29 January 2010 - 11:07

CODE
"Version"="1.6"
Hier sollte die Versionsnummer kein Problem sein - allerdings wird Sie überschrieben falls beide Versionen sie unter HKEY_CLASSES_ROOT\Interface\{033044F9-666F-3435-B0D8-2975C9F4EE1B}\TypeLib ablegen.

CODE
[HKEY_CLASSES_ROOT\TypeLib\{C9E15A43-8BF8-4B54-AA7B-594F0AF82EA6}\1.6]
Hier tritt das Problem aber auf.