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
- msidbComponentAttributesSourceOnly-
- 1
- 0x0001
- msidbComponentAttributesOptional-
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath-
- 4
- 0x0004
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
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource-
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Dieses Bit sollte nur für transitive Komponenten festgelegt werden. Siehe Verwenden von transitiven Komponenten.- msidbComponentAttributesNeverOverwrite-
- 128
- 0x0080
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
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
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 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.