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
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
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
- 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 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
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
[!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
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 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.