Création d'un ICE

Si vous ne parvenez pas à trouver les évaluateurs de cohérence interne dont vous avez besoin parmi les actions personnalisées ICE existantes répertoriées dans la référence ICE, vous devrez préparer votre propre ICE pour valider votre package.

Lors de la création d’actions personnalisées ICE, vous devez effectuer les opérations suivantes :

  • Basez les ICE uniquement sur les actions personnalisées des types répertoriés dans le tableau indiqué.
  • Appelez MsiProcessMessage et publiez un message de type INSTALLMESSAGE_USER. Lors de la création de vos messages ICE, respectez le format de message dans les instructions de création de messages ICE.
  • Rédigez votre ICE de manière à ce qu’il capture toutes les erreurs d’API et renvoie toujours ERROR_SUCCESS. Cela est nécessaire pour permettre aux actions personnalisées ultérieures de s’exécuter après l’échec d’un ICE.

Les actions personnalisées ICE sont limitées aux types d’actions personnalisées suivants :

Type d’action personnalisée Description
Type d’action personnalisée 1 DLL dans le flux binaire
Type d’action personnalisée 2 EXE dans le flux binaire
Type d’action personnalisée 5 JScript dans le flux binaire
Type d’action personnalisée 6 VBScript dans le flux binaire
Type d’action personnalisée 37 Code JScript sous forme de chaîne
Type d’action personnalisée 38 Code VBScript sous forme de chaîne

 

Ce qu'il ne faut pas faire lors de la création d’une action personnalisée ICE :

  • Ne partez pas du principe que le handle vers le moteur reçu par l'ICE est une instance d’installation de la base de données du programme d’installation. S’il ne s’agit pas d’une instance d’installation, certaines propriétés ne sont pas définies, les répertoires source et cible ne sont pas résolus et les états de fonctionnalités actuels ne sont pas définis.
  • Ne comptez pas sur l’exécution antérieure, ou sur la non-exécution, d’une action d’installation, d’une action personnalisée ou d’un autre ICE. Du fait qu'une ICE précédente a pu créer des colonnes temporaires dans n’importe quelle table, les auteurs doivent référencer des colonnes par nom dans la mesure du possible. Les ICE doivent nettoyer les colonnes ou tables temporaires avant leur sortie.
  • Ne partez pas du principe que les auteurs ont accès à une image du répertoire source de la base de données.
  • Ne partez pas du principe que les modifications apportées à la base de données ne sont pas persistantes.

Exemple ICE en C++

Exemple ICE dans VBScript