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
Die Komponente kann nicht von der Quelle aus ausgeführt werden. Legen Sie dieses Bit für alle Komponenten fest, die zu einem Feature gehören, um zu verhindern, dass das Feature „run-from-network“ oder „run-from-source“ ausgeführt wird. Folgendes ist zu beachten: Wenn eine Funktion keine Komponenten umfasst, stehen für diese Funktion immer „run-from-source“ und „run-from-my-computer“ als gültige Optionen zur Verfügung.
msidbComponentAttributesSourceOnly
1
0x0001
Die Komponente kann nur von der Quelle aus ausgeführt werden. Legen Sie dieses Bit für alle Komponenten fest, die zu einem Feature gehören, um zu verhindern, dass das Feature „run-from-my-computer“ ausgeführt wird. Folgendes ist zu beachten: Wenn eine Funktion keine Komponenten umfasst, stehen für diese Funktion immer „run-from-source“ und „run-from-my-computer“ als gültige Optionen zur Verfügung.
msidbComponentAttributesOptional
2
0x0002
Die Komponente kann lokal oder über die Quelle ausgeführt werden.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Wenn dieses Bit festgelegt ist, wird der Wert in der Spalte „KeyPath“ als Schlüssel für die Registry-Tabelle verwendet. Wenn das Feld „Value“ des entsprechenden Datensatzes in der Registry-Tabelle NULL ist, darf das Feld „Name“ in diesem Datensatz nicht „+“, „-“ oder „*“ enthalten. Weitere Informationen finden Sie unter der Beschreibung des Felds „Name“ in der Registry-Tabelle.
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
Wenn dieses Bit festgelegt ist, erhöht der Installer die Verweisanzahl in der freigegebenen DLL-Registrierung der Schlüsseldatei der Komponente. Wenn dieses Bit nicht festgelegt ist, erhöht der Installer die Verweisanzahl nur, wenn die Verweisanzahl bereits vorhanden ist.
msidbComponentAttributesPermanent
16
0x0010
Wenn dieses Bit festgelegt ist, entfernt der Installer die Komponente nicht während einer Deinstallation. Der Installer registriert einen zusätzlichen Systemclient für die Komponente in den Windows Installer-Registrierungseinstellungen.
msidbComponentAttributesODBCDataSource
32
0x0020
Wenn dieses Bit festgelegt ist, ist der Wert in der Spalte „KeyPath“ ein Schlüssel für die ODBCDataSource-Tabelle.
msidbComponentAttributesTransitive
64
0x0040
Wenn dieses Bit festgelegt ist, wertet der Installer den Wert der Anweisung in der Spalte „Condition“ bei einer Neuinstallation neu aus. Wenn der Wert zuvor False war und in True geändert wurde, installiert der Installer die Komponente. Wenn der Wert zuvor True war und in False geändert wurde, entfernt der Installer die Komponente auch dann, wenn sie über andere Produkte als Clients verfügt.
Dieses Bit sollte nur für transitive Komponenten festgelegt werden. Weitere Informationen finden Sie unter Verwenden transitiver Komponenten.
msidbComponentAttributesNeverOverwrite
128
0x0080
Wenn dieses Bit festgelegt ist, wird die Komponente vom Installer nicht installiert oder neu installiert, wenn bereits eine Schlüsselpfaddatei oder ein Schlüsselpfad-Registrierungseintrag für die Komponente vorhanden ist. Die Anwendung registriert sich selbst als Client der Komponente.
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
Legen Sie dieses Bit fest, um dies als 64-Bit-Komponente zu markieren. Dieses Attribut erleichtert die Installation von Paketen, die sowohl 32-Bit- als auch 64-Bit-Komponenten enthalten. Wenn dieses Bit nicht festgelegt ist, wird die Komponente als 32-Bit-Komponente registriert.
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
Legen Sie dieses Bit für eine Komponente in einem Patchpaket fest, um zu verhindern, dass verwaiste Komponenten auf dem Computer verbleiben. Wenn ein nachfolgender Patch installiert wird, der mit dem Wert msidbPatchSequenceSupersedeEarlier in der MsiPatchSequence-Tabelle gekennzeichnet ist, um den ersten Patch zu ersetzen, kann Windows Installer 4.5 und höher die Registrierung aufheben und Komponenten deinstallieren, die mit msidbComponentAttributesUninstallOnSupersedence gekennzeichnet sind. Wenn die Komponente nicht mit diesem Bit gekennzeichnet ist, kann bei der Installation eines ersetzenden Patches eine nicht verwendete Komponente auf dem Computer verbleiben.
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 eine Komponente mit diesem Attributwert in mindestens einem auf dem System installierten Paket gekennzeichnet ist, behandelt der Installer die Komponente als in allen Paketen gekennzeichnet. Wenn ein Paket, das die markierte Komponente gemeinsam verwendet, deinstalliert wird, kann Windows Installer 4.5 weiterhin die höchste Version der Komponente auf dem System freigeben, auch wenn diese höchste Version von dem Paket installiert wurde, das deinstalliert wird.
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.

Überprüfen

ICE02
ICE03
ICE06
ICE07
ICE08
ICE09
ICE18
ICE19
ICE21
ICE30
ICE32
ICE35
ICE38
ICE41
ICE42
ICE43
ICE46
ICE50
ICE54
ICE57
ICE59
ICE62
ICE67
ICE76
ICE79
ICE80
ICE83
ICE86
ICE88
ICE91
ICE92
ICE97