Mit Wise Package Studio 8 wurden 3 Komponenten Attribute der neueren Windows Installer Versionen hinzugefügt, welche wir in diesem Artikel genauer unter die Lupe nehmen:
msidbComponentAttributesDisableRegistryReflection (Disable registry reflection)
(Betrifft nur x64 Betriebssysteme)
Dieses Komponenten Attribut deaktiviert die Registry Reflection für alle Registrey Keys der betroffenen Komponente.
Vereinfacht erklärt:
Auf 64-Bit Windows Systemen gibt es 2 Registry Ansichten, eine für 32-Bit und eine für 64-Bit Applikationen.
Dabei unterscheidet man zwischen folgenden 3 Redirection Typen:
- Shared
- Gemeinsam verwendeter Registry Key.
- Redirected
- 32-Bit / 64-Bit Registry Schlüssel sind separat.
- Reflection
- Aus Interoperabilitätsgründen synchronisiert das Betriebssystem gewisse Keys zwischen den Ansichten.
Letztere Methode kann man mit diesem Attribut deaktiviert werden, da dieses Verhalten nicht immer erwünscht sein muss.
Ab Windows 7 / 2008 R2 wurde das Registry Reflection Feature entfernt. Damit wird diese Option für diese Betriebsysteme überflüssig.
Weiterführende Information zum Thema Registry Reflection im Microsoft Developer Network
msidbComponentAttributesUninstallOnSupersedence (Uninstall on supercedence)
Dieses Attribut ist lediglich für die „Small Patch“ Thematik relevant.
Wir erläutern das ganze einfachheitshalber mit einem praktischen Beispiel:
Wir installieren das Produkt A welches die Komponente Y beinhaltet.
Wir installieren den Patch 1 für das Produkt A, welches als Neuerung eine neue Komponente namens Komponente Z mitliefert. Das Produkt A besteht nun aus Komponente Y & Z
Nun kommen wir zu Patch 2, welcher Patch 1 „superseded“ also ersetzt bzw. überflüssig macht.
Komponente Y wurde in dieser Version aktualisiert und machte dadurch Komponente Z welche in Patch 1 hinzugefügt wurde überflüssig.Installiert man Patch 2 über das Produkt mit Patch 1 ergibt sich folgendes Resultat:
Aktualisierte Komponente Y.
Komponente Z ist physisch (Files) immer noch vorhanden.Installiert man hingegen Patch 2 direkt über das Produkt ohne vorher Patch 1 zu installieren ergibt sich folgendes Resultat:
Aktualisierte Komponente Y.
Komponente Z wurde NIE installiert.
Aktiviert man nun bei einer Komponente das „Uninstall on supercedence“ Attribut, überprüft Windows Installer jeweils ob dieser noch notwendig ist & entfernt ihn gegebenen falls.
Bei unserem Beispiel würde das wie folgt aussehen:
In Patch 1 ist für Komponente Z das Attribut gesetzt.
Nun Installieren wir wieder Patch 2, allerdings schaut des Resultat nun anders aus:
Aktualisierte Komponente Y
Komponente Z wurde entfernt
Um das ganze besser veranschaulichen zu können haben wir ein Test-Set mit MSI & Patches realisiert, damit man das Attribut auch in Aktion erleben kann.
msidbComponentAttributesShared (Shared)
Dieses Komponenten Attribut stellt sicher, dass jeweils die aktuellste Version der Komponente zur Verfügung steht.
Wir erläutern das ganze einfachheitshalber mit einem praktischen Beispiel:
Zuerst wird Produkt A installiert, welches den gemeinsam verwendeten Komponenten Z in der Version 1.0 installiert.
Als nächstes Installieren wir Produkt B mit dem gemeinsam verwendeten Komponenten Z in der Version 1.1.
Nun Installieren wir für Produkt A den Patch X welches den gemeinsam verwendeten Komponenten Z auf die Version 1.2 hebt.
Aufgrund diverser Probleme entscheidet man sich Patch X für Produkt A wieder zu deinstallieren: Während diesem Vorgang wird wieder die alte Version von Komponent Z in der Version 1.0 wiederhergestellt.
Da Produkt B aber explizit auf die Version 1.1 setzt funktioniert dieses nun nicht mehr.
Sobald dieses Attribut bei einer Komponente aktiv ist, stellt Windows Installer jeweils sicher, dass die aktuellste Version eines gemeinsam verwendeten Komponenten auf dem System bleibt.
Wir empfehlen deshalb den Einsatz dieses Attributes für gemeinsam verwendete Komponenten, neben den üblichen “Always Increment shared .DLL Count” & “Leave installed on uninstall” Attributen.