Compartir a través de


Sintaxis de instrucción condicional

En esta sección se describe la sintaxis de las instrucciones condicionales usadas por la funciónMsiEvaluateCondition y la acción tablas de secuencia. Para obtener más información, vea, Ejemplos de sintaxis de instrucciones condicionales.

Resumen de la sintaxis de instrucción condicional

En esta tabla y en la lista siguiente se resume la sintaxis que se va a usar en expresiones condicionales.

Artículo Sintaxis
valor símbolo | literal | entero
comparison-operator < | > | <= | >= | = | <>
término value | value comparison-operator value | ( expresión )|
Boolean-factor term | término NO
Término booleano Factor booleano | Término de Y de factor booleano
expresión Término booleano | Expresión de término booleano OR
símbolo propiedad | %environment-variable | $component-action | ?component-state | &feature-action | !feature-state

 

  • Los nombres de símbolos y los valores distinguen mayúsculas de minúsculas.

  • Los nombres de las variables de entorno no distinguen mayúsculas de minúsculas.

  • El texto literal debe incluirse entre comillas ("texto").

    Nota

    El texto literal que contiene comillas no se puede usar en instrucciones condicionales porque no hay ningún carácter de escape para comillas dentro del texto literal. Para realizar una comparación con el texto literal que contiene comillas, el texto literal debe colocarse en una propiedad . Por ejemplo, para comprobar que la propiedad SERVERNAME no contiene comillas, defina una propiedad denominada QUOTES en la tabla Property de con un valor de " y cambie la condición a NOT SERVERNAME><QUOTES.

     

  • Los valores de propiedad inexistentes se tratan como cadenas vacías.

  • No se admiten valores numéricos de punto flotante.

  • Los operadores y la prioridad son los mismos que en los lenguajes BASIC y SQL.

  • No se admiten operadores aritméticos.

  • Los paréntesis se pueden usar para invalidar la precedencia del operador.

  • Los operadores no distinguen mayúsculas de minúsculas.

  • Para las comparaciones de cadenas, una tilde "~" prefijo al operador realiza una comparación que no distingue mayúsculas de minúsculas.

  • La comparación de un entero con un valor de cadena o propiedad que no se puede convertir en un entero siempre es msiEvaluateConditionFalse, excepto para el operador de comparación "<>", que devuelve msiEvaluateConditionTrue.

Prefijos de acceso

En la tabla siguiente se muestran los prefijos que se van a usar para acceder a la información del sistema y del instalador para su uso en expresiones condicionales.

Tipo de símbolo Prefijo Valor
Propiedad del instalador (ninguno) Valor de la propiedad (tabla Property).
Variable de entorno % Valor de la variable de entorno.
Clave de tabla de componentes $ Estado de acción del componente.
Clave de tabla de componentes ? Estado instalado del componente.
Clave de tabla de características & Estado de acción de la característica.
Clave de tabla de características ! Estado instalado de la característica.

 

Operadores lógicos

En la tabla siguiente se muestran los operadores lógicos en expresiones condicionales, en orden de prioridad alta a baja.

Operador Significado
No Operador unario de prefijo; invierte el estado del término siguiente.
Y TRUE si ambos términos son TRUE.
O TRUE si o ambos términos son TRUE.
Xor TRUE si ambos términos son TRUE, pero no ambos.
Eqv TRUE si ambos términos son TRUE o ambos términos son FALSE.
Duende TRUE si el término izquierdo es FALSE o el término derecho es TRUE.

 

Operadores comparativos

En la tabla siguiente se muestran los operadores de comparación usados en expresiones condicionales. Estos operadores de comparación solo pueden producirse entre dos valores.

Operador Significado
= TRUE si el valor izquierdo es igual al valor derecho.
<> TRUE si el valor izquierdo no es igual al valor derecho.
> TRUE si el valor izquierdo es mayor que el valor derecho.
>= TRUE si el valor izquierdo es mayor o igual que el valor derecho.
< TRUE si el valor izquierdo es menor que el valor derecho.
<= TRUE si el valor izquierdo es menor o igual que el valor derecho.

 

Operadores de subcadena

En la tabla siguiente se muestran los operadores de subcadena usados en expresiones condicionales. Los operadores de subcadena pueden producirse entre dos valores de cadena.

Operador Significado
>< TRUE si la cadena izquierda contiene la cadena derecha.
<< TRUE si la cadena izquierda comienza con la cadena derecha.
>> TRUE si la cadena izquierda termina con la cadena derecha.

 

Operadores numéricos bit a bit

En la tabla siguiente se muestran los operadores numéricos bit a bit en expresiones condicionales. Estos operadores pueden producirse entre dos valores enteros.

Operador Significado
>< AND bit a bit, TRUE si los enteros izquierdo y derecho tienen bits en común.
<< True si los 16 bits altos del entero izquierdo son iguales al entero derecho.
>> True si los 16 bits bajos del entero izquierdo son iguales al entero derecho.

 

Valores de estado de características y componentes

En la tabla siguiente se muestra dónde es válido usar los símbolos de operador de características y componentes.

> de estado de <de operador Donde esta sintaxis es válida
$component-action En la tabla condición de y en las tablas secuencia, después de la acción CostFinalize.
&acción de características En la tabla condición de y en las tablas secuencia, después de la acción CostFinalize.
!feature-state En la tabla condición de y en las tablas secuencia, después de la acción CostFinalize.
?component-state En la tabla condición de y en las tablas secuencia, después de la acción CostFinalize.

 

En la tabla siguiente se muestran los valores de estado de características y componentes usados en expresiones condicionales. Estos estados no se establecen hasta que se llama a MsiSetInstallLevel, ya sea directamente o mediante la acción CostFinalize.

Estado Valor Significado
INSTALLSTATE_UNKNOWN -1 No se realizará ninguna acción en la característica o el componente.
INSTALLSTATE_ADVERTISED 1 Característica anunciada. Este estado no está disponible para los componentes.
INSTALLSTATE_ABSENT 2 La característica o el componente no están presentes.
INSTALLSTATE_LOCAL 3 Característica o componente en el equipo local.
INSTALLSTATE_SOURCE 4 La característica o el componente se ejecutan desde el origen.

 

Por ejemplo, la expresión condicional "&MyFeature=3" se evalúa como True solo si MyFeature cambia de su estado actual al estado de instalarse en el equipo local, INSTALLSTATE_LOCAL.

Tenga en cuenta que no debe depender de la condición $Component 1=3 para comprobar si Component1 está instalado localmente en el equipo. Esto puede producir un error si Component1 está instalado por más de un producto. Una vez instalado Component1 localmente por Product1, el instalador evalúa la condición $Component 1=3 como False durante la instalación de Product2. Esto se debe a que el instalador determina la versión del componente mediante la ruta de acceso de clave del componente y marca el componente para la instalación si su versión es mayor o igual que el componente instalado.

Tenga en cuenta que el instalador no realizará comparaciones directas del Versión tipo de datos en instrucciones condicionales. Por ejemplo, no puede usar operadores comparativos para comparar versiones como "01.10" y "1.010" en una instrucción condicional. En su lugar, use un método válido para buscar una versión, como se describe en Búsqueda de aplicaciones, archivos, entradas del Registro o entradas de archivo .iniy, a continuación, establezca una propiedad .

usar propiedades en instrucciones condicionales