Sintaxis de instrucciones condicionales
En esta sección se describe la sintaxis de las instrucciones condicionales que usa la función MsiEvaluateCondition y las tablas de secuencia de acciones. Para obtener más información, consulte Ejemplos de sintaxis de instrucción condicional.
Resumen de la sintaxis de instrucciones condicionales
En esta tabla y en la lista siguiente se resume la sintaxis que se va a usar en expresiones condicionales.
Elemento | Syntax |
---|---|
value | symbol | literal | integer |
operador de comparación | < | > | <= | >= | = | <> |
término | value | value comparison-operator value | ( expression )| |
factor booleano | term | NOT term |
término booleano | Boolean-factor | Boolean-factor AND term |
expresión | Boolean-term | Boolean-term OR expression |
símbolo | property | %environment-variable | $component-action | ?component-state | &feature-action | !feature-state |
Los nombres y los valores de símbolo distinguen mayúsculas de minúsculas.
En los nombres de variables de entorno no se hace distinción entre mayúsculas y minúsculas.
El texto literal debe ir entre comillas ("texto").
Nota:
No se puede usar texto literal que contenga comillas 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, este 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 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 precedencia 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 "~" como prefijo del 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 de propiedad que no se puede convertir en un entero siempre es msiEvaluateConditionFalse, excepto 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 | Value |
---|---|---|
Propiedad del instalador | (ninguno) | Valor de la tabla de propiedad (Property). |
Variable de entorno | % | Valor de la variable de entorno. |
Clave de la tabla Component | $ | Estado de acción del componente. |
Clave de la tabla Component | ? | Estado instalado del componente. |
Clave de la tabla Feature | & | Estado de acción de la característica. |
Clave de la tabla Feature | ! | 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.
Operator | Significado |
---|---|
Not | Operador unario de prefijo; invierte el estado del siguiente término. |
Y | TRUE si ambos términos son TRUE. |
Or | TRUE si uno o ambos términos son TRUE. |
Xor | TRUE si un término es TRUE, pero no ambos. |
Eqv | TRUE si ambos términos son TRUE o ambos términos son FALSE. |
Imp | 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 que se usan en expresiones condicionales. Estos operadores de comparación solo pueden producirse entre dos valores.
Operator | 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 que se usan en expresiones condicionales. Los operadores de subcadena pueden producirse entre dos valores de cadena.
Operator | 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.
Operator | Significado |
---|---|
>< | AND bit a bit, TRUE si los enteros izquierdo y derecho tienen bits comunes. |
<< | 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 de componentes
En la tabla siguiente se muestra dónde es válido usar los símbolos de operador de características y de componentes.
Operador <state> | Dónde es válida la sintaxis |
---|---|
$component-action | En la tabla Condition y en las tablas de secuencia, después de la acción CostFinalize. |
&feature-action | En la tabla Condition y en las tablas de secuencia, después de la acción CostFinalize. |
!feature-state | En la tabla Condition y en las tablas de secuencia, después de la acción CostFinalize. |
?component-state | En la tabla Condition y en las tablas de secuencia, después de la acción CostFinalize. |
En la tabla siguiente se muestran los valores de estado de las características y componentes que se usan en expresiones condicionales. Estos estados no se establecen hasta que se llama a MsiSetInstallLevel, ya sea directamente o mediante la acción CostFinalize.
Estado | Value | 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 | Característica o componente no presente. |
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 estar instalado en el equipo local, INSTALLSTATE_LOCAL.
Tenga en cuenta que no debe depender de la condición $Component1=3 para comprobar si Component1 está instalado localmente en el equipo. Esto puede producir un error si más de un producto instaló Component1. Una vez que Product1 haya instalado Component1 localmente, 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 el trazado de la 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 tipo de datos Version 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 Buscar aplicaciones existentes, archivos, entradas del Registro o entradas de archivo .ini y, después, establezca una propiedad.
Temas relacionados