Création de tables de répertoires de module de fusion
Un module de fusion peut être appliqué à un fichier .msi pour ajouter des répertoires à l’installation, mais il ne peut pas remplacer ni supprimer des répertoires existants. La table Directory spécifie la disposition des répertoires que le module de fusion fournit à l’installation cible. Une table Directory est obligatoire dans chaque module de fusion.
Utilisez les instructions suivantes pour créer la table Directory dans un module de fusion. Pour plus d’informations, consultez Table Directory et Utilisation de la table Directory.
La structure de répertoires ajoutée par le module de fusion doit avoir un seul répertoire racine. La racine doit être nommée TARGETDIR. L’utilisateur peut changer la valeur de TARGETDIR pendant la fusion pour spécifier où attacher la structure de répertoires du module dans l’arborescence de répertoires de la cible.
Les tables de module de fusion autres que la table Directory ne doivent pas référencer directement les emplacements de répertoire dans TARGETDIR. L’emplacement de cette référence change si la valeur de TARGETDIR est changée par l’utilisateur.
Les tables du module de fusion doivent référencer l’emplacement d’un répertoire enfant de TARGETDIR ou d’un autre répertoire dans l’arborescence du module de fusion. Effectuez les opérations suivantes pour spécifier TARGETDIR comme parent d’un répertoire dans le module de fusion. Entrez le répertoire dans la colonne Directory et entrez TARGETDIR dans la colonne Directory_Parent. Utilisez la notation « . » dans la colonne DefaultDir pour indiquer que ce répertoire se trouve dans TARGETDIR sans sous-répertoire. Pour plus d’informations, consultez Utilisation de la table Directory.
Les noms des répertoires ajoutés par le module de fusion doivent utiliser les conventions de nommage décrites dans Nommage des clés primaires dans les bases de données de module de fusion. Cela comprend les répertoires prédéfinis par des propriétés comme la propriété SystemFolder et la propriété ProgramFilesFolder.
Ajoutez un GUID à chaque entrée de la table Directory (sauf TARGETDIR). Cela comprend les entrées de la table Directory qui spécifient les propriétés SystemFolder de Windows Installer, par exemple, SystemFolder.00000000_0000_0000_0000_000000000000. La bibliothèque Mergemod.dll ajoute des actions personnalisées pour définir la propriété SystemFolder.
Quand un répertoire prédéfini est inclus dans un module de fusion, l’outil de fusion ajoute automatiquement un type d’action personnalisé 51 à la base de données cible. L’auteur du module de fusion doit vérifier qu’une table CustomAction est également incluse. La table CustomAction peut être vide, mais cette table doit exister dans la base de données cible et garantit que les répertoires prédéfinis modifiés sont écrits dans les emplacements appropriés. Par exemple, quand un répertoire système est inclus dans un module de fusion, l’auteur du module de fusion doit vérifier qu’une table d’actions personnalisées existe.
Notez que l’algorithme de correspondance pour la génération de ces actions personnalisées de type 51 vérifie uniquement que le nom du répertoire commence par une des propriétés SystemFolder prédéfinies. Il ne vérifie pas que le nom du répertoire est exactement égal à la propriété de répertoire. Tout répertoire commençant par un de ces noms de dossier standard obtient une action personnalisée de type 51, même si le reste du nom n’est pas un GUID. Les auteurs doivent veiller à ce que cela ne génère pas de correspondances de faux positifs, ni d’actions personnalisées involontaires, sur des clés primaires dérivées qui commencent par une des propriétés SystemFolder.
Voici un exemple de table Directory dans un module de fusion, et les répertoires résolus attendus.
Répertoire | Directory_Parent | DefaultDir |
---|---|---|
TARGETDIR | SourceDir | |
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | TARGETDIR | .:MMM_Prog |
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | TARGETDIR | MMM_Sys |
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | Dir00.BC82E350_ C7FC_11d1_ A848_006097ABDE17 | MFC_OCX |
Un module de fusion avec la table Directory ci-dessus doit donner la structure de répertoires suivante.
Répertoire | Cible | Source |
---|---|---|
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [Point d’installation du module de fusion]\ | [Point source du module de fusion]\MMM_Prog |
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [SystemFolder]\ | [Point source du module de fusion]\MMM_Sys |
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [Point d’installation du module de fusion]\MFC_OCX | [Point source du module de fusion]\MMM_Prog\MFC_OCX |