Partager via


Syntaxe d’instruction conditionnelle

Cette section décrit la syntaxe des instructions conditionnelles utilisées par la fonction MsiEvaluateCondition et les tables de séquences d’actions. Pour plus d’informations, consultez Exemples de syntaxe d’instruction conditionnelle.

Récapitulatif de la syntaxe d’instruction conditionnelle

Ce tableau et la liste suivante résument la syntaxe à utiliser dans les expressions conditionnelles.

Élément Syntaxe
value symbole | littéral | entier
comparison-operator < | > | <= | >= | = | <>
terme valeur | valeur de l’opérateur de comparaison de valeurs | (expression)|
Facteur booléen term | NOT term
Boolean-term Facteur booléen | Facteur booléen ET terme
expression Terme booléen | Terme booléen OR expression
symbole propriété | %variable-environnement | $action-composant | ?état-composant | &action-fonctionnalité | !état-fonctionnalité

 

  • Les noms des symboles et les valeurs respectent la casse.

  • Les noms des variables d’environnement ne respectent pas la casse.

  • Le texte littéral doit être placé entre guillemets droits ("texte").

    Notes

    Le texte littéral contenant des guillemets ne peut pas être utilisé dans les instructions conditionnelles, car il n’existe aucun caractère d’échappement pour les guillemets à l’intérieur du texte littéral. Pour effectuer une comparaison avec du texte littéral contenant des guillemets, le texte littéral doit être placé dans une propriété. Par exemple, pour vérifier que la propriété SERVERNAME ne contient pas de guillemets, définissez une propriété appelée QUOTES dans la table Property avec la valeur " et remplacez la condition par NOT NOMSERVEUR><QUOTES.

     

  • Les valeurs de propriété inexistantes sont traitées comme des chaînes vides.

  • Les valeurs numériques à virgule flottante ne sont pas prises en charge.

  • Les opérateurs et la précédence sont les mêmes que dans les langages BASIC et SQL.

  • Les opérateurs arithmétiques ne sont pas pris en charge.

  • Vous pouvez utiliser des parenthèses pour remplacer la priorité de l’opérateur.

  • Les opérateurs ne respectent pas la casse.

  • Pour les comparaisons de chaînes, un tilde « ~ » préfixé à l’opérateur effectue une comparaison qui ne respecte pas la casse.

  • La comparaison d’un entier avec une valeur de chaîne ou de propriété qui ne peut pas être convertie en entier est toujours msiEvaluateConditionFalse, à l’exception de l’opérateur de comparaison « <> », qui retourne msiEvaluateConditionTrue.

Préfixes d’accès

Le tableau suivant présente les préfixes à utiliser pour accéder à diverses informations système et de programme d’installation à utiliser dans les expressions conditionnelles.

Type de symbole Préfixe Valeur
Propriété du programme d’installation (aucun) Valeur de la table de propriétés (Property).
Variable d’environnement % Valeur de la variable d’environnement.
Clé de table de composant $ État de l’action du composant.
Clé de table de composant ? État installé du composant.
Clé de table de fonctionnalités & État d’action de la fonctionnalité.
Clé de table de fonctionnalités ! État installé de la fonctionnalité.

 

Opérateurs logiques

Le tableau suivant montre les opérateurs logiques dans les expressions conditionnelles, dans l’ordre de priorité élevé à faible.

Opérateur Signification
Not Opérateur unaire du préfixe ; inverse l’état du terme suivant.
And TRUE si les deux termes sont TRUE.
ou TRUE si l’un des termes ou les deux ont la valeur TRUE.
Xor TRUE si l’un ou l’autre des termes, mais pas les deux, ont la valeur TRUE.
Eqv TRUE si les deux termes ont la valeur TRUE ou si les deux termes ont la valeur FALSE.
Imp TRUE si le terme de gauche a la valeur FALSE ou si le terme de droite a la valeur TRUE.

 

Opérateurs comparatifs

Le tableau suivant présente les opérateurs de comparaison utilisés dans les expressions conditionnelles. Ces opérateurs de comparaison ne peuvent être présents qu’entre deux valeurs.

Opérateur Signification
= TRUE si la valeur de gauche est égale à la valeur de droite.
<> TRUE si la valeur de gauche n’est pas égale à la valeur de droite.
> TRUE si la valeur de gauche est supérieure à la valeur de droite.
>= TRUE si la valeur de gauche est supérieure ou égale à la valeur de droite.
< TRUE si la valeur de gauche est inférieure à la valeur de droite.
<= TRUE si la valeur de gauche est inférieure ou égale à la valeur de droite.

 

Opérateurs de sous-chaîne

Le tableau suivant montre les opérateurs de sous-chaîne utilisés dans les expressions conditionnelles. Les opérateurs de sous-chaîne peuvent être présents entre deux valeurs de chaîne.

Opérateur Signification
>< TRUE si la chaîne de gauche contient la chaîne de droite.
<< TRUE si la chaîne de gauche commence par la chaîne de droite.
>> TRUE si la chaîne de gauche se termine par la chaîne de droite.

 

Opérateurs numériques au niveau du bit

Le tableau suivant montre les opérateurs numériques au niveau du bit dans les expressions conditionnelles. Ces opérateurs peuvent être présents entre deux valeurs entières.

Opérateur Signification
>< AND au niveau du bit, TRUE si les entiers gauche et droit ont des bits en commun.
<< True si les 16 bits supérieurs de l’entier gauche sont égaux à l’entier de droite.
>> True si les 16 bits inférieurs de l’entier gauche sont égaux à l’entier de droite.

 

Valeurs d’état des fonctionnalités et des composants

Le tableau suivant indique où il est valide d’utiliser les symboles d’opérateur de fonctionnalité et de composant.

<État> de l’opérateur Où cette syntaxe est valide
$action-composant Dans la table Condition et dans les tables sequence, après l’action CostFinalize.
&feature-action Dans la table Condition et dans les tables sequence, après l’action CostFinalize.
!feature-state Dans la table Condition et dans les tables sequence, après l’action CostFinalize.
?component-state Dans la table Condition et dans les tables sequence, après l’action CostFinalize.

 

Le tableau suivant présente les valeurs d’état des fonctionnalités et des composants utilisées dans les expressions conditionnelles. Ces états ne sont pas définis tant que MsiSetInstallLevel n’est pas appelé, soit directement soit par l’action CostFinalize.

État Valeur Signification
INSTALLSTATE_UNKNOWN -1 Aucune action à entreprendre sur la fonctionnalité ou le composant.
INSTALLSTATE_ADVERTISED 1 Fonctionnalité annoncée. Cet état n’est pas disponible pour les composants.
INSTALLSTATE_ABSENT 2 La fonctionnalité ou le composant n’est pas présent.
INSTALLSTATE_LOCAL 3 Fonctionnalité ou composant sur l’ordinateur local.
INSTALLSTATE_SOURCE 4 Fonctionnalité ou composant exécuté à partir de la source.

 

Par exemple, l’expression conditionnelle « &MyFeature=3 » prend la valeur True uniquement si MyFeature passe de son état actuel à l’état d’installation sur l’ordinateur local, INSTALLSTATE_LOCAL.

Notez que vous ne devez pas dépendre de la condition $Component1=3 pour vérifier si Component1 est installé localement sur l’ordinateur. Cela peut échouer si Component1 est installé par plusieurs produits. Une fois que Component1 a été installé localement par Product1, le programme d’installation évalue la condition $Component1=3 comme False pendant l’installation de Product2. En effet, le programme d’installation détermine la version du composant à l’aide du chemin de clé du composant et marque le composant pour l’installation si sa version est supérieure ou égale au composant installé.

Notez que le programme d’installation n’effectue pas de comparaisons directes du type de données Version dans les instructions conditionnelles. Par exemple, vous ne pouvez pas utiliser d’opérateurs comparatifs pour comparer des versions comme « 01.10 » et « 1.010 » dans une instruction conditionnelle. Utilisez plutôt une méthode valide pour rechercher une version, comme décrit dans Recherche d’applications, de fichiers, d’entrées de Registre ou d’entrées de fichier .ini existantes, puis définissez une propriété.

Utilisation de propriétés dans les instructions conditionnelles