Freigeben über


Komponententabelle

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

Spalte Art Schlüssel Nullable
Bestandteil Bezeichner Y N
ComponentId GUID- N Y
Verzeichnis_ Bezeichner N N
Attribute ganze Zahl N N
Zustand Bedingung N Y
KeyPath Bezeichner N Y

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ß geschrieben sein müssen. Hilfsprogramme wie GUIDGEN können GUIDs mit Kleinbuchstaben generieren. 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 nicht vom Installationsprogramm entfernt oder repariert werden. Dies kann absichtlich erfolgen, 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 hilfreich sein, wenn Datendateien auf den Computer eines Benutzers kopiert werden, die nicht registriert werden müssen.

Directory_

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 Verzeichnistabelle abgerufen wird.

Entwickler müssen das Erstellen von Komponenten vermeiden, die Dateien in einem der Benutzerprofilordner platzieren. Diese Dateien wären nicht für alle Benutzer in Mehrbenutzersituationen verfügbar und könnten dazu führen, dass das Installationsprogramm die Komponente dauerhaft als Reparatur erfordert.

Externer Schlüssel zur Spalte 1 der Verzeichnistabelle.

Attribute

Diese Spalte enthält eine Bitkennzeichnung, die Optionen für die Remoteausführung angibt. Fügen Sie das angegebene Bit zum Gesamtwert in der Spalte hinzu, um eine Option einzuschließen.

Anmerkung

Bei einer .msi Datei, die von einem Webspeicherort heruntergeladen wird, sollten die Attributkennzeichnungen nicht so festgelegt werden, dass eine Komponente aus der Quelle ausgeführt werden kann. Dies ist eine Einschränkung des Windows Installer und kann einen Featurestatus von INSTALLSTATE_BADCONFIG zurückgeben.

Bitkennzeichnung
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 aus dem Netzwerk oder aus der Quelle ausgeführt wird. Beachten Sie, dass, wenn ein Feature keine Komponenten enthält, das Feature immer "aus Quelle ausführen" und "von meinem Computer" als gültige Optionen anzeigt.
msidbComponentAttributesSourceOnly-
1
0x0001
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 ausgeführt wird. Beachten Sie, dass, wenn ein Feature keine Komponenten enthält, das Feature immer "aus Quelle ausführen" und "von meinem Computer" als gültige Optionen anzeigt.
msidbComponentAttributesOptional-
2
0x0002
Die Komponente kann lokal oder aus der Quelle ausgeführt werden.
msidbComponentAttributesRegistryKeyPath-
4
0x0004
Wenn dieses Bit festgelegt ist, wird der Wert in der Spalte "KeyPath" als Schlüssel in der Registrierungstabelleverwendet. Wenn das Feld "Wert" des entsprechenden Datensatzes in der Registrierungstabelle null ist, darf das Feld "Name" in diesem Datensatz nicht "+", "-" oder "*" enthalten. Weitere Informationen finden Sie in der Beschreibung des Felds "Name" in Registrierungstabelle.
Das Festlegen dieses Bits wird für Registrierungseinträge empfohlen, die in die HKCU-Struktur geschrieben wurden. 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 die Referenzanzahl in der freigegebenen DLL-Registrierung der Schlüsseldatei der Komponente. Wenn dieses Bit nicht festgelegt ist, erhöht das Installationsprogramm die Referenzanzahl nur, wenn die Referenzanzahl 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 Spalte "KeyPath" ein Schlüssel in der ODBCDataSource-Tabelle.
msidbComponentAttributesTransitive
64
0x0040
Wenn dieses Bit festgelegt ist, überprüft das Installationsprogramm den Wert der Anweisung in der Bedingungsspalte bei einer neu installierten Installation erneut. Wenn der Wert zuvor "False" lautete und in "True" geändert wurde, installiert das Installationsprogramm die Komponente. Wenn der Wert zuvor "True" lautete und in "False" geändert wurde, entfernt das Installationsprogramm die Komponente, auch wenn die Komponente andere Produkte als Clients aufweist.
Dieses Bit sollte nur für transitive Komponenten festgelegt werden. Siehe Verwenden von transitiven Komponenten.
msidbComponentAttributesNeverOverwrite-
128
0x0080
Wenn dieses Bit festgelegt ist, installiert oder installiert das Installationsprogramm die Komponente nicht, wenn bereits ein 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 Kennzeichen nur für Komponenten, die von der Registrierungstabelle registriert werden. Verwenden Sie dieses Flag nicht für Komponenten, die von der AppId, Class, Extension, ProgId, MIME-und Verb-Tabellen.
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 eine neue GUID in der Spalte "ComponentId" zu.
msidbComponentAttributesDisableRegistryReflection-
512
0x0200
Legen Sie dieses Bit fest, um Registry Reflection für alle vorhandenen und neuen Registrierungsschlüssel zu deaktivieren, die von dieser Komponente betroffen sind. Wenn dieses Bit festgelegt ist, ruft windows Installer die RegDisableReflectionKey- für jeden Schlüssel auf, auf den die 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.
Hinweis: 32-Bit-Windows-Anwendungen, die auf dem 64-Bit-Windows-Emulator (WOW64) ausgeführt werden, verweisen auf eine andere Ansicht der Registrierung als 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 nachfolgendes Patch installiert ist, mit dem msidbPatchSequenceSupersedeEarlier Wert in der MsiPatchSequence Tabelle gekennzeichnet, um den ersten Patch zu ersetzen, kann Windows Installer 4.5 und höher die Registrierung und Deinstallation von Komponenten aufheben und deinstallieren, die mit dem msidbComponentAttributesUninstallOnSupersedence Wert gekennzeichnet sind. Wenn die Komponente nicht mit diesem Bit gekennzeichnet ist, kann die Installation eines ersetzten Patches eine nicht verwendete Komponente auf dem Computer hinter sich lassen.
Das Festlegen der MSIUNINSTALLSUPERSEDEDCOMPONENTS Eigenschaft hat den gleichen Effekt wie das Festlegen dieses Bits für alle Komponenten.
Windows Installer 4.0 und frühere: Die msidbComponentAttributesUninstallOnSupersedence Wert wird nicht unterstützt und ignoriert.

msidbComponentAttributesShared-
2048
0x0800
Wenn eine Komponente mit diesem Attributwert in mindestens einem Paket gekennzeichnet ist, das auf dem System installiert ist, behandelt das Installationsprogramm die Komponente wie in allen Paketen markiert. Wenn ein Paket, das die markierte Komponente teilt, deinstalliert wird, kann Windows Installer 4.5 weiterhin die höchste Version der Komponente auf dem System freigeben, auch wenn diese höchste Version vom Paket installiert wurde, das deinstalliert wird.
Wenn die DisableSharedComponent-Richtlinie auf 1 festgelegt ist, erhält kein Paket die von diesem Bit aktivierte Freigegebene Komponentenfunktionalität.
Windows Installer 4.0 und frühere: Der wert msidbComponentAttributesShared wird nicht unterstützt und ignoriert.

Bedingung

Diese Spalte enthält eine bedingte Anweisung, die steuern kann, ob eine Komponente installiert ist. Wenn die Bedingung NULL ist oder auf "true" ausgewertet wird, ist die Komponente aktiviert. Wenn die Bedingung auf "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 die DoAction ControlEvent- verwenden, um MsiSetComponentStateaufzurufen.

Beachten Sie, dass die Komponente, sofern die Transitive-Bit in der Spalte "Attribute" nicht für eine Komponente festgelegt ist, einmal aktiviert bleibt, auch wenn die bedingte Anweisung in der Spalte "Bedingung" später bei einer nachfolgenden Wartungsinstallation des Produkts auf "False" ausgewertet wird.

Die Spalte "Bedingung" in der Tabelle "Komponente" akzeptiert bedingte Ausdrücke, die Verweise auf die installierten Zustände von Features und Komponenten enthalten. Informationen zur Syntax bedingter Anweisungen finden Sie unter Syntax der bedingten Anweisung.

KeyPath

Dieser Wert verweist auf eine Datei oder einen Ordner, die zu der Komponente gehört, die vom Installationsprogramm zum Erkennen der Komponente verwendet wird. Zwei Komponenten können denselben Schlüsselpfadwert nicht 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 entweder ein Primärschlüssel in der Registry, ODBCDataSource-oder Dateitabellen je nach Attributwert. Wenn KeyPath null ist, wird der Ordner der Directory_ Spalte als Schlüsselpfad verwendet.

Da ordner, die vom Installationsprogramm erstellt wurden, 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, wenn eine Windows Installer-Komponente eine Datei oder einen Registrierungsschlüssel enthält, der durch Windows Resource Protection (WRP) oder eine Datei geschützt ist, die durch Windows File Protection (WFP) geschützt ist, diese Ressource als KeyPath für die Komponente verwendet werden muss. In diesem Fall installiert, aktualisiert oder entfernt 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 Using Windows Installer and Windows Resource Protection.

Bemerkungen

Eine Erläuterung der Beziehung zwischen Komponenten und Features finden Sie in Featuretabelle.

Das Installationsprogramm verfolgt freigegebene DLLs unabhängig von der Anzahl der freigegebenen DLL-Verweise in der Registrierung. Wenn eine Verweisanzahl für eine freigegebene DLL in der Registrierung vorhanden ist, erhöht das Installationsprogramm immer die Anzahl, wenn sie die Datei installiert, und erhöht sie, wenn sie deinstalliert wird. Wenn msidbComponentAttributesSharedDllRefCountnicht festgelegt ist und die Verweisanzahl noch nicht vorhanden ist, erstellt das Installationsprogramm keine. Beachten Sie, dass die Anzahl der SharedDLLs-Verweise in der Registrierung für alle Im Systemordner installierten Dateien erhöht wird.

Wenn msidbComponentAttributesSharedDllRefCount nicht festgelegt ist, kann eine andere Anwendung die Komponente auch dann entfernen, wenn sie noch benötigt wird. Um zu sehen, wie dies geschehen könnte, sollten Sie das folgende Szenario berücksichtigen:

  • Eine Anwendung, die das Installationsprogramm verwendet, installiert eine freigegebene Komponente.
  • Die msidbComponentAttributesSharedDllRefCount Bit ist nicht festgelegt, und es gibt keine Verweisanzahl. Daher beginnt das Installationsprogramm keine Referenzanzahl.
  • Eine Ältere Anwendung, die diese Komponente gemeinsam verwendet und das Installationsprogramm nicht verwendet, wird installiert.
  • Die Legacyanwendung erstellt und erhöht eine Verweisanzahl für die freigegebene Komponente.
  • Die Legacyanwendung wird deinstalliert.
  • Die Referenzanzahl für die freigegebene Komponente wird auf Null erhöht, 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 msidbComponentAttributesSharedDllRefCountfest.

Beachten Sie, dass Systemdienstekomponenten nicht als "run-from-source" angegeben werden sollten, ohne speziell für diese Verwendung vorgesehen zu sein. Weitere Informationen finden Sie in der ServiceInstall-Tabelle.

Beachten Sie, dass Attribute, die die Ausführung von Der Quellinstallation ermöglichen, niemals für Komponenten festgelegt werden sollten, die Bibliotheken mit dynamischen Verknüpfungen enthalten, die in den Systemordner verschoben werden. Der Grund dafür ist, dass nachfolgende Aufrufe an LoadLibrary- für die DLL fehlschlagen, wenn der Installationsstatus der Komponente auf die Ausführung aus der Quelle festgelegt wird, indem sie auf ein Feature folgt oder in der Benutzeroberfläche festgelegt wird.

Siehe auch Steuern von Featureauswahlzustä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-