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
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
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
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Ce bit ne doit être défini que pour les composants transitifs. Consultez Utilisation de composants transitifs.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
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
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
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 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.