Component-Tabelle
Die Component-Tabelle listet Komponenten auf, und sie enthält folgende Spalten.
Spalte | Typ | Schlüssel | Nullwerte zulässig |
---|---|---|---|
Komponente | Identifier | J | N |
ComponentId | GUID | N | J |
Directory_ | Identifier | N | N |
Attribute | Integer | N | N |
Bedingung | Condition | N | J |
KeyPath | Identifier | N | J |
Spalten
-
Component
-
Identifiziert den Komponentendatensatz.
Schlüssel der primären Tabelle.
-
ComponentId
-
Eine Zeichenfolgen-GUID, die für diese Komponente, Version und Sprache eindeutig ist.
Beachten Sie, dass die Buchstaben dieser GUIDs in Großbuchstaben geschrieben sein müssen. Beachten Sie, dass Dienstprogramme wie „GUIDGEN“ GUIDs generieren können, die Kleinbuchstaben enthalten. Die Kleinbuchstaben müssen in Großbuchstaben geändert werden, um aus diesen gültige Komponentencode-GUIDs zu machen.
Wenn diese Spalte NULL ist, registriert der Installer die Komponente nicht, und die Komponente kann vom Installer nicht entfernt oder repariert werden. Dies kann absichtlich geschehen, wenn die Komponente nur während der Installation benötigt wird, z. B. eine benutzerdefinierte Aktion, die temporäre Dateien bereinigt oder ein altes Produkt entfernt. Es kann auch nützlich sein, wenn Datendateien auf die Computer von Benutzer*innen kopiert werden, die nicht registriert werden müssen.
-
Directory_
-
Externer Schlüssel eines Eintrags in der Directory-Tabelle. Dies ist ein Eigenschaftsname, dessen Wert den tatsächlichen Pfad enthält, der entweder durch die AppSearch-Aktion oder mit der Standardeinstellung festgelegt werden kann, die aus der Directory-Tabelle abgerufen wird.
Entwickler müssen das Erstellen von Komponenten vermeiden, die Dateien in einem der Benutzerprofilordner ablegen. Diese Dateien wären nicht für alle Benutzer in Mehrbenutzersituationen verfügbar und könnten dazu führen, dass der Installer die Komponente dauerhaft als reparaturbedürftige Komponente erachtet.
Externer Schlüssel für Spalte 1 der Directory-Tabelle.
-
Attributes
-
Diese Spalte enthält ein Bitflag, das Optionen für die Remoteausführung angibt. Fügen Sie das angegebene Bit dem Gesamtwert in der Spalte hinzu, um eine Option einzubeziehen.
Hinweis
Im Fall einer MSI-Datei, die von einem Webspeicherort heruntergeladen wird, sollten die Attributflags nicht so festgelegt werden, dass eine Komponente aus der Quelle ausgeführt werden kann. Dies ist eine Einschränkung von Windows Installer und kann den Featurezustand INSTALLSTATE_BADCONFIG zurückgeben.
Bitflag - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Das Festlegen dieses Bits wird für Registrierungseinträge empfohlen, die in den HKCU-Hive geschrieben werden. Dadurch wird sichergestellt, dass der Installer die erforderlichen HKCU-Registrierungseinträge schreibt, wenn sich mehrere Benutzer*innen auf demselben Computer befinden.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Dieses Bit sollte nur für transitive Komponenten festgelegt werden. Weitere Informationen finden Sie unter Verwenden transitiver Komponenten.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Verwenden Sie dieses Flag nur für Komponenten, die von der Registry-Tabelle registriert werden. Verwenden Sie dieses Flag nicht für Komponenten, die von den Tabellen AppId, Class, Extension, ProgId, MIME und Verb registriert wurden.- msidbComponentAttributes64bit
- 256
- 0x0100
Wenn dies eine 64-Bit-Komponente ist, die eine 32-Bit-Komponente ersetzt, legen Sie dieses Bit fest, und weisen Sie eine neue GUID in der Spalte „ComponentId“ zu.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Legen Sie dieses Bit fest, um die Registrierungsreflektion für alle vorhandenen und neuen Registrierungsschlüssel zu deaktivieren, die von dieser Komponente betroffen sind. Wenn dieses Bit festgelegt ist, ruft der Windows Installer die Funktion RegDisableReflectionKey für jeden Schlüssel auf, auf den die Komponente zugreift. Dieses Bit ist ab Windows Installer Version 4.0 verfügbar. Dieses Bit wird auf 32-Bit-Systemen ignoriert. Dieses Bit wird in den 64-Bit-Versionen von Windows XP ignoriert.
Hinweis: 32-Bit-Windows-Anwendungen, die auf dem 64-Bit-Windows-Emulator (WOW64) ausgeführt werden, verweisen auf eine andere Ansicht der Registrierung als auf 64-Bit-Anwendungen. Die Registrierungsreflektion kopiert einige Registrierungswerte zwischen diesen beiden Registrierungsansichten.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
Das Festlegen der MSIUNINSTALLSUPERSEDCOMPONENTS-Eigenschaft hat die gleiche Auswirkung wie das Festlegen dieses Bits für alle Komponenten.
Windows Installer 4.0 und früher: Der Wert msidbComponentAttributesUninstallOnSupersedence wird nicht unterstützt und wird ignoriert.- msidbComponentAttributesShared
- 2048
- 0x0800
Wenn die DisableSharedComponent-Richtlinie auf 1 festgelegt ist, erhält kein Paket die von diesem Bit aktivierte Funktionalität der freigegebenen Komponente.
Windows Installer 4.0 und früher: Der Wert msidbComponentAttributesShared wird nicht unterstützt und wird ignoriert. -
Condition
-
Diese Spalte enthält eine bedingte Anweisung, die steuern kann, ob eine Komponente installiert ist. Wenn die Bedingung NULL ist oder TRUE ergibt, wird die Komponente aktiviert. Wenn die Bedingung FALSE ergib, ist die Komponente deaktiviert und wird nicht installiert.
Das Feld „Bedingung“ aktiviert oder deaktiviert eine Komponente nur während der CostFinalize-Aktion. Um eine Komponente nach CostFinalize zu aktivieren oder zu deaktivieren, müssen Sie eine benutzerdefinierte Aktion oder DoAction ControlEvent verwenden, um MsiSetComponentState aufzurufen.
Beachten Sie, dass die Komponente aktiviert bleibt, wenn das transitive Bit in der Spalte „Attributes“ nicht für eine Komponente festgelegt ist, auch wenn die bedingte Anweisung in der Spalte „Condition“ später bei einer nachfolgenden Wartungsinstallation des Produkts FALSE ergibt.
Die Spalte „Condition“ in der Component-Tabelle akzeptiert bedingte Ausdrücke, die Verweise auf die installierten Zustände von Features und Komponenten enthalten. Informationen zur Syntax von bedingten Anweisungen finden Sie unter Syntax für bedingte Anweisungen.
-
KeyPath
-
Der Wert zeigt auf eine Datei oder einen Ordner, der zu der Komponente gehört, die vom Installer zum Erkennen der Komponente verwendet wird. Zwei Komponenten können nicht denselben Schlüsselpfadwert verwenden. Der Wert in dieser Spalte ist auch der Pfad, der von der MsiGetComponentPath-Funktion zurückgegeben wird.
Wenn der Wert nicht NULL ist, ist KeyPath je nach Attributwert entweder ein Primärschlüssel für die Tabellen Registry, ODBCDataSource oder File. Wenn KeyPath NULL ist, wird der Ordner der Spalte „Directory_“ als Schlüsselpfad verwendet.
Da vom Installer erstellte Ordner gelöscht werden, wenn sie leer sind, müssen Sie einen Eintrag in der CreateFolder-Tabelle erstellen, um eine Komponente zu installieren, die aus einem leeren Ordner besteht.
Beachten Sie, dass diese Ressource als KeyPath für die Komponente verwendet werden muss, wenn eine Windows Installer-Komponente eine durch Windows-Dateischutz (WFP) geschützte Datei oder einen durch Windows Resource Protection (WRP) geschützten Registrierungsschlüssel enthält. In diesem Fall installiert, aktualisiert oder entfernt der Windows Installer die Komponente nicht. Sie sollten keine geschützten Ressourcen in ein Installationspaket einschließen. Stattdessen sollten Sie die unterstützten Ressourcenersetzungsmechanismen für Windows Resource Protection verwenden. Weitere Informationen finden Sie unter Verwenden von Windows Installer und Windows Resource Protection.
Bemerkungen
Eine Erläuterung der Beziehung zwischen Komponenten und Features finden Sie unter Featuretabelle.
Der Installer verfolgt freigegebene DLLs unabhängig von der Anzahl der freigegebenen DLL-Verweise in der Registrierung nach. Wenn eine Verweisanzahl für eine freigegebene DLL in der Registrierung vorhanden ist, erhöht der Installer bei der Installation der Datei immer die Anzahl und verringert sie bei der Deinstallation. Wenn msidbComponentAttributesSharedDllRefCount nicht festgelegt ist und die Verweisanzahl noch nicht vorhanden ist, erstellt der Installer keines. Beachten Sie, dass die Anzahl der SharedDLLs-Verweise in der Registrierung für alle Dateien erhöht wird, die im Systemordner installiert sind.
Wenn msidbComponentAttributesSharedDllRefCount nicht festgelegt ist, kann eine andere Anwendung die Komponente entfernen, auch wenn sie noch benötigt wird. Um zu verstehen, wie dies geschehen könnte, stellen Sie sich folgendes Szenario vor:
- Eine Anwendung, die den Installer verwendet, installiert eine freigegebene Komponente.
- Das MsidbComponentAttributesSharedDllRefCount-Bit ist nicht festgelegt, und es gibt keine Verweisanzahl. Daher beginnt der Installer nicht mit dem Zählen der Verweise.
- Eine ältere Anwendung, die diese Komponente freigibt und den Installer nicht verwendet, wird installiert.
- Die ältere Anwendung erstellt und erhöht eine Verweisanzahl für die freigegebene Komponente.
- Die ältere Anwendung wird deinstalliert.
- Die Verweisanzahl für die freigegebene Komponente wird auf Null verringert, und die Komponente wird entfernt.
- Die Anwendung, die den Installer verwendet, hat keinen Zugriff mehr auf die Komponente.
Um dieses Verhalten zu vermeiden, legen Sie msidbComponentAttributesSharedDllRefCount fest.
Beachten Sie, dass Systemdienstkomponenten nicht als Run-from-Source (Von Quelle ausführen) angegeben werden sollten, ohne speziell für diese Verwendung konzipiert zu sein. Weitere Details finden Sie in der ServiceInstall-Tabelle.
Beachten Sie, dass Attribute, die die Run-from-Source-Installation aktivieren, niemals für Komponenten festgelegt werden dürfen, die Bibliotheken mit dynamischen Verknüpfungen enthalten, die in den Systemordner gelangen. Der Grund besteht darin, dass nachfolgende Aufrufe von LoadLibrary für die DLL fehlschlagen würden, wenn der Installationszustand der Komponente auf „Run-from-source“ festgelegt wird, indem ein Feature befolgt wird oder durch Festlegen auf der Benutzeroberfläche.
Siehe auch Steuern der Funktionsauswahlstatus.