Partager 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 tel que « 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 de module 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 à cette technique ne fonctionnent pas (afin que l’outil de fusion puisse les générer) ou qu’elles existent sous la forme correcte (afin qu’elles fonctionnent comme prévu).

L’échec de 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 de répertoires avec des clés primaires telles que 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 tels que ProgramFilesFolder, les entrées de répertoire du module peuvent entrer en conflit avec des lignes déjà existantes. Cette condition exigerait que l’utilisateur de votre module fractionne les fichiers sources de votre module pour qu’il corresponde au répertoire source existant.

Résultat

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, ce qui provoque 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 est 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. L’emplacement d’installation du répertoire est donc la valeur de la propriété. Les fichiers passent de l’emplacement source distinct au 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 se fusionner 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 d’action pré-créé 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 d’annuaires

Répertoire Directory_Parent DefaultDir
ProgramFilesFolder Répertoire1 Un
StartMenuFolder Répertoire2 B :C
AppDataFolder Répertoire3 D
MyPicturesFolder Répertoire4 E

 

table de composants

Composant Répertoire
Composant1.<GUID> ProgramFilesFolder
Composant2.<GUID> StartMenuFolder
Composant3.<GUID> AppDataFolder
Composant4.<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

 

de référence ice du module de fusion