Partager via


Table de composants

La table Composant répertorie les composants et contient les colonnes suivantes.

Colonne Type Clé Nullable
Composant identificateur Y N
ComponentId GUID N Y
Répertoire_ identificateur N N
Attributs entier N N
Condition condition N Y
KeyPath identificateur N Y

Colonnes

composant

Identifie l’enregistrement du composant.

Clé de table primaire.

ComponentId

GUID de chaîne unique à ce composant, version et langage.

Notez que les lettres de ces GUID doivent être en majuscules. Les utilitaires tels que GUIDGEN peuvent générer des GUID contenant des lettres minuscules. Les lettres minuscules doivent être modifiées en majuscules pour rendre ces GUID de code de composant valides.

Si cette colonne a la valeur Null, le programme d’installation n’inscrit pas le composant et le composant ne peut pas être supprimé ou réparé par le programme d’installation. Cela peut être effectué intentionnellement si le composant est nécessaire uniquement pendant l’installation, par exemple une action personnalisée qui nettoie les fichiers temporaires ou supprime un ancien produit. Il peut également être utile lors de la copie de fichiers de données sur l’ordinateur d’un utilisateur qui n’ont pas besoin d’être inscrits.

Directory_

Clé externe d’une entrée dans la table Directory. Il s’agit d’un nom de propriété dont la valeur contient le chemin d’accès réel, qui peut être défini par l’action AppSearch ou avec le paramètre par défaut obtenu à partir de la table Directory.

Les développeurs doivent éviter de créer des composants qui placent des fichiers dans l’un des dossiers profil utilisateur. Ces fichiers ne seraient pas disponibles pour tous les utilisateurs dans des situations multi-utilisateurs et pourraient entraîner le programme d’installation à afficher définitivement le composant comme nécessitant une réparation.

Clé externe à la colonne de l’une de la table Directory.

attributs

Cette colonne contient un indicateur de bits qui spécifie les options d’exécution à distance. Ajoutez le bit indiqué à la valeur totale de la colonne pour inclure une option.

Note

Dans le cas d’un fichier .msi téléchargé à partir d’un emplacement web, les indicateurs d’attribut ne doivent pas être définis pour permettre à un composant d’être exécuté à partir de la source. Il s’agit d’une limitation de Windows Installer et peut retourner un état de fonctionnalité de INSTALLSTATE_BADCONFIG.

Indicateur de bits
msidbComponentAttributesLocalOnly
0
0x0000
Le composant ne peut pas être exécuté à partir de la source. Définissez ce bit pour tous les composants appartenant à une fonctionnalité pour empêcher l’exécution de la fonctionnalité à partir du réseau ou de l’exécution à partir de la source. Notez que si une fonctionnalité n’a aucun composant, la fonctionnalité affiche toujours les options d’exécution à partir de la source et d’exécution à partir de mon ordinateur comme options valides.
msidbComponentAttributesSourceOnly
1
0x0001
Le composant ne peut être exécuté qu’à partir de la source. Définissez ce bit pour tous les composants appartenant à une fonctionnalité pour empêcher l’exécution de la fonctionnalité à partir de mon ordinateur. Notez que si une fonctionnalité n’a aucun composant, la fonctionnalité affiche toujours les options d’exécution à partir de la source et d’exécution à partir de mon ordinateur comme options valides.
msidbComponentAttributesOptional
2
0x0002
Le composant peut s’exécuter localement ou à partir de la source.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Si ce bit est défini, la valeur de la colonne KeyPath est utilisée comme clé dans la table Registre. Si le champ Valeur de l’enregistrement correspondant dans la table Registre a la valeur Null, le champ Nom de cet enregistrement ne doit pas contenir « + », « - » ou « * ». Pour plus d’informations, consultez la description du champ Nom dans table Registre.
La définition de ce bit est recommandée pour les entrées de Registre écrites dans la ruche HKCU. Cela garantit que le programme d’installation écrit les entrées de Registre HKCU nécessaires lorsqu’il existe plusieurs utilisateurs sur le même ordinateur.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Si ce bit est défini, le programme d’installation incrémente le nombre de références dans le registre DLL partagé du fichier de clé du composant. Si ce bit n’est pas défini, le programme d’installation incrémente le nombre de références uniquement si le nombre de références existe déjà.
msidbComponentAttributesPermanent
16
0x0010
Si ce bit est défini, le programme d’installation ne supprime pas le composant lors d’une désinstallation. Le programme d’installation inscrit un client système supplémentaire pour le composant dans les paramètres du Registre Windows Installer.
msidbComponentAttributesODBCDataSource
32
0x0020
Si ce bit est défini, la valeur de la colonne KeyPath est une clé dans la table ODBCDataSource.
msidbComponentAttributesTransitive
64
0x0040
Si ce bit est défini, le programme d’installation réévalue la valeur de l’instruction dans la colonne Condition lors d’une réinstallation. Si la valeur était précédemment False et a été remplacée par True, le programme d’installation installe le composant. Si la valeur était précédemment True et a été remplacée par False, le programme d’installation supprime le composant même si le composant possède d’autres produits en tant que clients.
Ce bit ne doit être défini que pour les composants transitifs. Consultez Utilisation de composants transitifs.
msidbComponentAttributesNeverOverwrite
128
0x0080
Si ce bit est défini, le programme d’installation n’installe pas ou ne réinstalle pas le composant si un fichier de chemin d’accès de clé ou une entrée de Registre de chemins d’accès de clé existe déjà pour le composant. L’application s’inscrit en tant que client du composant.
Utilisez cet indicateur uniquement pour les composants inscrits par la table Registre. N’utilisez pas cet indicateur pour les composants inscrits par le AppId, classe, extension, ProgId, MIMEet tables verb.
msidbComponentAttributes64bit
256
0x0100
Définissez ce bit pour le marquer comme composant 64 bits. Cet attribut facilite l’installation des packages qui incluent à la fois des composants 32 bits et 64 bits. Si ce bit n’est pas défini, le composant est inscrit en tant que composant 32 bits.
S’il s’agit d’un composant 64 bits remplaçant un composant 32 bits, définissez ce bit et affectez un nouveau GUID dans la colonne ComponentId.
msidbComponentAttributesDisableRegistryReflection
512
0x0200
Définissez ce bit pour désactiver réflexion du Registre sur toutes les clés de Registre existantes et nouvelles affectées par ce composant. Si ce bit est défini, Windows Installer appelle la RegDisableReflectionKey sur chaque clé accessible par le composant. Ce bit est disponible avec Windows Installer version 4.0. Ce bit est ignoré sur les systèmes 32 bits. Ce bit est ignoré sur les versions 64 bits de Windows XP.
Remarque : applications Windows 32 bits s’exécutant sur l’émulateur Windows 64 bits (WOW64) font référence à une vue différente du Registre des applications 64 bits. La réflexion du Registre copie certaines valeurs de Registre entre ces deux vues de Registre.
msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
Définissez ce bit pour un composant dans un package de correctifs afin d’éviter de laisser des composants orphelins sur l’ordinateur. Si un correctif ultérieur est installé, marqué avec la table msidbPatchSequenceSupersedeEarlier dans sa table MsiPatchSequence pour remplacer le premier correctif, Windows Installer 4.5 et ultérieur peut annuler l’inscription et désinstaller les composants marqués avec la valeur msidbComponentAttributesUninstallOnSupersedence. Si le composant n’est pas marqué avec ce bit, l’installation d’un correctif de remplacement peut laisser derrière elle un composant inutilisé sur l’ordinateur.
La définition de la propriété MSIUNINSTALLSUPERSEDEDCOMPONENTS a le même effet que la définition de ce bit pour tous les composants.
Windows Installer 4.0 et versions antérieures: la valeur msidbComponentAttributesUninstallOnSupersedence n’est pas prise en charge et est ignorée.

msidbComponentAttributesShared
2048
0x0800
Si un composant est marqué avec cette valeur d’attribut dans au moins un package installé sur le système, le programme d’installation traite le composant comme marqué dans tous les packages. Si un package qui partage le composant marqué est désinstallé, Windows Installer 4.5 peut continuer à partager la version la plus élevée du composant sur le système, même si cette version la plus élevée a été installée par le package en cours de désinstallation.
Si la stratégie DisableSharedComponent est définie sur 1, aucun package n’obtient la fonctionnalité de composant partagé activée par ce bit.
Windows Installer 4.0 et versions antérieures: la valeur msidbComponentAttributesShare dShared n’est pas prise en charge et est ignorée.

condition de

Cette colonne contient une instruction conditionnelle qui peut contrôler si un composant est installé. Si la condition a la valeur Null ou est évaluée à true, le composant est activé. Si la condition prend la valeur False, le composant est désactivé et n’est pas installé.

Le champ Condition active ou désactive un composant uniquement pendant l’action CostFinalize. Pour activer ou désactiver un composant après CostFinalize, vous devez utiliser une action personnalisée ou l'DoAction ControlEvent pour appeler MsiSetComponentState.

Notez que, sauf si le bit transitif dans la colonne Attributs est défini pour un composant, le composant reste activé une fois installé même si l’instruction conditionnelle de la colonne Condition prend ultérieurement la valeur False lors d’une installation de maintenance ultérieure du produit.

La colonne Condition de la table Composant accepte les expressions conditionnelles contenant des références aux états installés des fonctionnalités et des composants. Pour plus d’informations sur la syntaxe des instructions conditionnelles, consultez syntaxe de l’instruction conditionnelle.

KeyPath

Cette valeur pointe vers un fichier ou un dossier appartenant au composant que le programme d’installation utilise pour détecter le composant. Deux composants ne peuvent pas partager la même valeur de chemin d’accès de clé. La valeur de cette colonne est également le chemin d’accès retourné par la fonction MsiGetComponentPath.

Si la valeur n’est pas null, KeyPath est une clé primaire dans l'registre, ODBCDataSourceou tables file en fonction de la valeur d’attribut. Si KeyPath est null, le dossier de la colonne Directory_ est utilisé comme chemin d’accès de clé.

Étant donné que les dossiers créés par le programme d’installation sont supprimés lorsqu’ils deviennent vides, vous devez créer une entrée dans la table CreateFolder pour installer un composant qui se compose d’un dossier vide.

Notez que si un composant Windows Installer contient un fichier ou une clé de Registre protégée par Protection des ressources Windows (WRP) ou un fichier protégé par la Protection des fichiers Windows (PAM), cette ressource doit être utilisée comme KeyPath pour le composant. Dans ce cas, Windows Installer n’installe pas, ne met pas à jour ou supprime le composant. Vous ne devez pas inclure de ressources protégées dans un package d’installation. Au lieu de cela, vous devez utiliser les mécanismes de remplacement de ressources pris en charge pour La protection des ressources Windows. Pour plus d’informations, consultez Utilisation de Windows Installer et de la protection des ressources Windows.

Remarques

Pour une discussion sur la relation entre les composants et les fonctionnalités, consultez tableau de fonctionnalités.

Le programme d’installation effectue le suivi des DLL partagées indépendamment du nombre de références DLL partagées dans le Registre. Si un nombre de références pour une DLL partagée existe dans le Registre, le programme d’installation incrémente toujours le nombre lors de l’installation du fichier et le décrémente lors de la désinstallation. Si msidbComponentAttributesSharedDllRefCount, n’est pas défini et que le nombre de références n’existe pas déjà, le programme d’installation n’en crée pas. Notez que le nombre de références SharedDLS dans le Registre est incrémenté pour tous les fichiers installés dans le dossier Système.

Si msidbComponentAttributesSharedDllRefCount n’est pas défini, une autre application peut supprimer le composant même s’il est toujours nécessaire. Pour voir comment cela peut se produire, tenez compte du scénario suivant :

  • Une application qui utilise le programme d’installation installe un composant partagé.
  • Le msidbComponentAttributesSharedDllRefCount bit n’est pas défini et il n’existe aucun nombre de références. Par conséquent, le programme d’installation ne commence pas un nombre de références.
  • Une application héritée qui partage ce composant et n’utilise pas le programme d’installation est installée.
  • L’application héritée crée et incrémente un nombre de références pour le composant partagé.
  • L’application héritée est désinstallée.
  • Le nombre de références pour le composant partagé est décrémenté à zéro et le composant est supprimé.
  • L’application utilisant le programme d’installation n’a plus accès au composant.

Pour éviter ce comportement, définissez msidbComponentAttributesSharedDllRefCount.

Notez que les composants des services système ne doivent pas être spécifiés en tant que run-from-source sans être spécifiquement conçus pour une telle utilisation. Pour plus d’informations, consultez la table ServiceInstall.

Notez que les attributs permettant l’installation de run-from-source ne doivent jamais être définis pour les composants contenant des bibliothèques de liens dynamiques qui se trouvent dans le dossier système. La raison est que si l’état d’installation du composant devient défini pour s’exécuter à partir de la source en suivant une fonctionnalité ou en étant défini dans l’interface utilisateur, les appels suivants à loadLibrary sur la DLL échoueraient.

Voir aussi, contrôle des états de sélection des fonctionnalités.

Validation

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