Komponententabelle

In der Tabelle Komponente sind die Komponenten aufgeführt, und sie enthält die folgenden Spalten.

Spalte Typ Schlüssel Nullwerte zulässig
Komponente Identifier J N
Componentid GUID N J
Verzeichnis_ Identifier N N
Attributes Integer N N
Bedingung Condition N J
KeyPath Identifier N J

Spalten

Komponente

Identifiziert den Komponentendatensatz.

Primärer Tabellenschlüssel.

Componentid

Eine Zeichenfolgen-GUID, die für diese Komponente, Version und Sprache eindeutig ist.

Beachten Sie, dass die Buchstaben dieser GUIDs Großbuchstaben sein müssen. Hilfsprogramme wie GUIDGEN können GUIDs generieren, die Kleinbuchstaben enthalten. Die Kleinbuchstaben müssen in Großbuchstaben geändert werden, um diese gültigen Komponentencode-GUIDs zu erstellen.

Wenn diese Spalte NULL ist, registriert das Installationsprogramm die Komponente nicht, und die Komponente kann vom Installationsprogramm 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. Dies kann auch beim Kopieren von Datendateien auf den Computer eines Benutzers nützlich sein, die nicht registriert werden müssen.

Verzeichnis_

Externer Schlüssel eines Eintrags in der Verzeichnistabelle. 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 ermittelt wurde.

Entwickler müssen die Erstellung von Komponenten vermeiden, die Dateien in einem der Benutzerprofilordner ablegen. Diese Dateien sind nicht für alle Benutzer in Situationen mit mehreren Benutzern verfügbar, und das Installationsprogramm kann dazu führen, dass die Komponente dauerhaft als reparaturbedürftig angezeigt wird.

Externer Schlüssel zu Spalte 1 der Directory-Tabelle.

Attribute

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 ein hinzuzufügen.

Hinweis

Im Fall einer .msi, 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 des Windows Installers und kann den Funktionsstatus INSTALLSTATE _ BADCONFIG zurückgeben.

Bitflag
msidbComponentAttributesLocalOnly
0
0x0000
Die Komponente kann nicht aus der Quelle ausgeführt werden. Legen Sie dieses Bit für alle Komponenten fest, die zu einem Feature gehören, um zu verhindern, dass das Feature vom Netzwerk oder aus der Quelle ausgeführt wird. Beachten Sie, dass das Feature immer run-from-source und run-from-my-computer als gültige Optionen zeigt, wenn ein Feature keine Komponenten enthält.
msidbComponentAttributesSourceOnly
1
0x0001
Die Komponente kann nur aus der Quelle ausgeführt werden. Legen Sie dieses Bit für alle Komponenten fest, die zu einem Feature gehören, um zu verhindern, dass das Feature von meinem Computer aus ausgeführt wird. Beachten Sie, dass das Feature immer run-from-source und run-from-my-computer als gültige Optionen zeigt, wenn ein Feature keine Komponenten enthält.
msidbComponentAttributesOptional
2
0x0002
Die Komponente kann lokal oder von der Quelle aus ausgeführt werden.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Wenn dieses Bit festgelegt ist, wird der Wert in der KeyPath-Spalte als Schlüssel in der Registrierungstabelle verwendet. Wenn das Feld Wert des entsprechenden Datensatzes in der Registrierungstabelle NULL ist, darf das Feld Name in diesem Datensatz "+", "-" oder "*" nicht enthalten. Weitere Informationen finden Sie in der Beschreibung des Felds Name in der Registrierungstabelle.
Das Festlegen dieses Bit wird für Registrierungseinträge empfohlen, die in die HKCU-Struktur geschrieben werden. Dadurch wird sichergestellt, dass das Installationsprogramm die erforderlichen HKCU-Registrierungseinträge schreibt, wenn mehrere Benutzer auf demselben Computer vorhanden sind.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Wenn dieses Bit festgelegt ist, erhöht das Installationsprogramm den Verweiszähler in der freigegebenen DLL-Registrierung der Schlüsseldatei der Komponente. Wenn dieses Bit nicht festgelegt ist, erhöht das Installationsprogramm die Verweisanzahl nur, wenn die Verweisanzahl bereits vorhanden ist.
msidbComponentAttributesPermanent
16
0x0010
Wenn dieses Bit festgelegt ist, entfernt das Installationsprogramm die Komponente während einer Deinstallation nicht. Das Installationsprogramm 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 KeyPath -Spalte ein Schlüssel in der ODBCDataSource-Tabelle.
msidbComponentAttributesTransitive
64
0x0040
Wenn dieses Bit festgelegt ist, wertet das Installationsprogramm den Wert der -Anweisung in der Spalte Bedingung nach einer Neuinstallation erneut aus. Wenn der Wert zuvor False war und in True geändert wurde, installiert das Installationsprogramm die Komponente. Wenn der Wert zuvor True war und in False geändert wurde, entfernt das Installationsprogramm die Komponente auch dann, wenn die Komponente ü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, installiert oder installiert das Installationsprogramm die Komponente nicht neu, wenn bereits eine Schlüsselpfaddatei oder ein Registrierungseintrag für den Schlüsselpfad 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 Registrierungstabelle registriert werden. Verwenden Sie dieses Flag nicht für Komponenten, die von den Tabellen AppId, Class, Extension, ProgId, MIMEund Verb registriert werden.
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 es sich um eine 64-Bit-Komponente handelt, die eine 32-Bit-Komponente ersetzt, legen Sie dieses Bit fest, und weisen Sie in der Spalte ComponentId eine neue GUID zu.
msidbComponentAttributesDisableRegistryReflection
512
0x0200
Legen Sie dieses Bit fest, um die Registrierungslektion für alle vorhandenen und neuen Registrierungsschlüssel zu deaktivieren, die von dieser Komponente betroffen sind. Wenn dieses Bit festgelegt ist, ruft Windows Installer den RegDisableReflectionKey für jeden Schlüssel auf, auf den von der Komponente zugegriffen wird. Dieses Bit ist mit 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.
[!Note]
32-Bit-Windows-Anwendungen, die auf dem 64-Bit-Windows-Emulator (WOW64) ausgeführt werden, beziehen sich auf eine andere Ansicht der Registrierung als 64-Bit-Anwendungen. Die Registrierungslektion kopiert einige Registrierungswerte zwischen diesen beiden Registrierungssichten.


msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
Legen Sie dieses Bit für eine Komponente in einem Patchpaket fest, um zu verhindern, dass verwaiste Komponenten auf dem Computer hinterlassen werden. Wenn ein nachfolgender Patch installiert ist, der mit dem MsidbPatchSequenceSupersedeEarlier-Wert in der MsiPatchSequence-Tabelle markiert ist, um den ersten Patch zu verdrängen, kann Windows Installer 4.5 und höher die Registrierung und Deinstallation von Komponenten aufheben, die mit dem Wert msidbComponentAttributesUninstallOnSupersedence gekennzeichnet sind. Wenn die Komponente nicht mit diesem Bit markiert ist, kann die Installation eines abgestützten Patches eine nicht verwendete Komponente auf dem Computer zurücklassen.
Das Festlegen der MSIUNINSTALLSUPERSEDEDCOMPONENTS-Eigenschaft hat die gleiche Auswirkung wie das Festlegen dieses Bit für alle Komponenten.
Windows Installer 4.0 undfrüher: Der Wert msidbComponentAttributesUninstallOnSupersedence wird nicht unterstützt und ignoriert.

msidbComponentAttributesShared
2048
0x0800
Wenn eine Komponente mit diesem Attributwert in mindestens einem auf dem System installierten Paket markiert ist, behandelt das Installationsprogramm die Komponente als in allen Paketen markiert. 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 gemeinsam verwenden, auch wenn diese höchste Version von dem paket installiert wurde, das deinstalliert wird.
Wenn die DisableSharedComponent-Richtlinie auf 1 festgelegt ist, ruft kein Paket die von diesem Bit aktivierte Funktionalität für freigegebene Komponenten ab.
Windows Installer 4.0 undfrüher: Der Wert msidbComponentAttributesShared wird nicht unterstützt und ignoriert.

Zustand

Diese Spalte enthält eine bedingte Anweisung, die steuern kann, ob eine Komponente installiert ist. Wenn die Bedingung NULL ist oder als TRUE ausgewertet wird, wird die Komponente aktiviert. Wenn die Bedingung als False ausgewertet wird, ist die Komponente deaktiviert und 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 das DoAction ControlEvent verwenden, um MsiSetComponentState auf aufruft.

Beachten Sie, dass die Komponente nach der Installation aktiviert bleibt, es sei denn, das transitive Bit in der Spalte Attribute ist für eine Komponente festgelegt. Dies gilt auch, wenn die Bedingungsanweisung in der Spalte Bedingung später bei einer nachfolgenden Wartungsinstallation des Produkts als False ausgewertet wird.

Die Spalte Bedingung 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

Dieser Wert verweist auf eine Datei oder einen Ordner, die zu der Komponente gehört, die das Installationsprogramm zum Erkennen der Komponente verwendet. Zwei Komponenten können nicht denselben Schlüsselpfadwert gemeinsam nutzen. 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 in den Tabellen Registry, ODBCDataSourceoder File. Wenn KeyPath NULL ist, wird der Ordner der Directory-Spalte _ als Schlüsselpfad verwendet.

Da vom Installationsprogramm erstellte Ordner gelöscht werden, wenn sie leer werden, 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 komponente des Windows-Installers eine Datei oder einen Registrierungsschlüssel enthält, die durch Windows Resource Protection (WRP) oder eine durch Windows File Protection (WFP) geschützte Datei geschützt ist. In diesem Fall installiert, Windows Installer die Komponente nicht installiert, aktualisiert oder entfernt. Sie sollten keine geschützten Ressourcen in ein Installationspaket ein schließen. Stattdessen sollten Sie die unterstützten Mechanismen zum Ersetzen von Ressourcen für Windows Resource Protection verwenden. Weitere Informationen finden Sie unter Verwenden des Windows Installers und Windows Resource Protection.

Bemerkungen

Eine Erörterung der Beziehung zwischen Komponenten und Features finden Sie unter Featuretabelle.

Das Installationsprogramm 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 das Installationsprogramm die Anzahl bei der Installation der Datei immer und dekrementiert sie bei der Deinstallation. Wenn msidbComponentAttributesSharedDllRefCount nicht festgelegt ist und die Verweisanzahl noch nicht vorhanden ist, erstellt das Installationsprogramm keins. Beachten Sie, dass die SharedDLLs-Verweisanzahl in der Registrierung für alle Dateien erhöht wird, die im Ordner System installiert sind.

Wenn msidbComponentAttributesSharedDllRefCount nicht festgelegt ist, kann eine andere Anwendung die Komponente auch dann entfernen, wenn sie noch benötigt wird. Betrachten Sie das folgende Szenario, um zu sehen, wie dies passieren könnte:

  • Eine Anwendung, die das Installationsprogramm verwendet, installiert eine freigegebene Komponente.
  • Das msidbComponentAttributesSharedDllRefCount-Bit ist nicht festgelegt, und es gibt keine Verweisanzahl. Daher beginnt das Installationsprogramm nicht mit einer Verweisanzahl.
  • Eine Legacyanwendung, die diese Komponente teilt und das Installationsprogramm nicht verwendet, wird installiert.
  • Die Legacyanwendung erstellt und erhöht einen Verweiszähler für die freigegebene Komponente.
  • Die Legacyanwendung wird deinstalliert.
  • Die Verweisanzahl für die freigegebene Komponente wird auf 0 (null) reduziert, und die Komponente wird entfernt.
  • Die Anwendung, die das Installationsprogramm verwendet, hat keinen Zugriff mehr auf die Komponente.

Um dieses Verhalten zu vermeiden, legen Sie msidbComponentAttributesSharedDllRefCount fest.

Beachten Sie, dass Systemdienstkomponenten nicht als Auslauf-aus-Quelle angegeben werden dürfen, ohne speziell für diese Verwendung konzipiert zu sein. Weitere Informationen finden Sie in der Tabelle ServiceInstall.

Beachten Sie, dass Attribute, die die Installation von quellenbasierten Ausführungen ermöglichen, nie für Komponenten festgelegt werden sollten, die Dynamic Link-Bibliotheken enthalten, die in den Systemordner verschoben werden. Der Grund dafür ist, dass nachfolgende Aufrufe von LoadLibrary in der DLL fehlschlagen würden, wenn der Installationsstatus der Komponente durch Das Ausführen aus der Quelle festgelegt wird, indem ein Feature oder in der Benutzeroberfläche festgelegt wird.

Weitere Informationen finden Sie unter Steuern von Funktionsauswahlzuständen.

Validierung

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