Share via


ICEM09

ICEM09 vérifie que le module de fusion gère en toute sécurité les répertoires prédéfinis. Pour ce faire, il vérifie qu’aucun composant du module n’installe un répertoire dans un répertoire système prédéfini, comme « ProgramFilesFolder » ou « StartMenuFolder ». Au lieu de cela, les modules doivent utiliser des répertoires avec des noms uniques (créés avec la convention d’affectation de noms des modules de fusion) et utiliser des actions personnalisées pour cibler le répertoire cible approprié. Cette approche empêche les modules d’entrer en conflit avec une structure de répertoires existante dans la base de données finale. ICEM09 vérifie que les actions personnalisées nécessaires au fonctionnement de cette technique n’existent pas (afin que l’outil de fusion puisse les générer) ou existent sous la forme correcte (afin qu’elles fonctionnent comme prévu).

L’échec de la correction d’un avertissement ou d’une erreur signalé par ICEM09 peut entraîner des problèmes pour les clients de votre module de fusion. Les lignes de table Directory avec des clés primaires comme ProgramFilesFolder existent souvent dans une base de données ; par conséquent, si les composants de votre module s’installent directement dans des répertoires prédéfinis, comme ProgramFilesFolder, les entrées de répertoire dans le module peuvent entrer en collision avec des lignes déjà existantes. Cette condition oblige l’utilisateur de votre module à fractionner les fichiers sources de votre module afin de correspondre au répertoire source existant.

Résultats

ICEM09 signale une erreur ou un avertissement lorsqu’un composant de module installe un répertoire dans un répertoire système prédéfini, provoquant un conflit de noms possible avec la structure de répertoires existante.

Exemple

ICEM09 publie les avertissements suivants pour un module contenant les entrées de base de données affichées.

Warning: The component 'Component1.<GUID>' installs directly into the pre-defined 
directory 'ProgramFilesFolder'. It is recommended that merge modules alias 
all such directories to unique names.

Renommez le répertoire du module de fusion afin qu’il ne corresponde pas à une propriété Windows Installer et qu’il soit donc unique. Définissez ensuite une propriété du même nom sur la valeur du répertoire Windows Installer. Lorsque la résolution de répertoire a lieu, le répertoire a une propriété du même nom, de sorte que l’emplacement d’installation du répertoire est la valeur de la propriété. Les fichiers sont déplacés de l’emplacement source distinct vers le même emplacement cible. Ce processus doit supprimer complètement les conflits de fusion.

Warning: The 'ModuleInstallExecuteSequence' table contains a type 51 action 
(StartMenuFolder.<GUID>) for a pre-defined directory, but this action 
does not have sequence number '1'

Si l’action n’a pas le numéro de séquence 1, elle peut ne pas être fusionnée dans la base de données cible suffisamment tôt dans la séquence pour fonctionner efficacement.

Pour corriger cet avertissement, définissez le numéro de séquence sur 1. Notez que la plupart des outils de fusion actuels (mais pas certaines versions antérieures) génèrent ces actions personnalisées au moment de la fusion ; il n’est donc pas toujours nécessaire de créer explicitement les actions dans le module de fusion.

Warning: The 'CustomAction' table contains a type 51 action (MyAppDataFolderAction) 
for a pre-defined directory, but the name is not the same as the target directory. 
Many merge tools will generate duplicate actions."

Étant donné que la colonne CustomAction est la clé primaire de la table CustomAction, certains outils de fusion peuvent générer des actions en double, car le nom de l’action pré-créée est différent.

Pour corriger cet avertissement, nommez l’action de la même façon que le répertoire cible. Notez que la plupart des outils de fusion actuels (mais pas certaines versions antérieures) génèrent ces actions personnalisées au moment de la fusion, il n’est donc pas toujours nécessaire de créer explicitement les actions dans le module de fusion.

Table Directory

Répertoire Directory_Parent DefaultDir
ProgramFilesFolder Répertoire1 Un
StartMenuFolder Directory2 B:C
AppDataFolder Directory3 D
MyPicturesFolder Directory4 E

 

Table Component

Composant Répertoire
Component1.<GUID> ProgramFilesFolder
Component2.<GUID> StartMenuFolder
Component3.<GUID> AppDataFolder
Component4.<GUID> MyPicturesFolder

 

Table CustomAction

CustomAction Type Source Cible
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

Table ModuleInstallExecuteSequence

Action Séquence BaseAction Après Condition
StartMenuFolder.<GUID> 100

 

Référence ICE du module de fusion