Share via


Sintaxe de instrução condicional

Esta seção descreve a sintaxe das instruções condicionais usadas pela função MsiEvaluateCondition e as tabelas de sequência de ações. Para obter mais informações, confira Exemplos de sintaxe de instrução condicional.

Resumo da sintaxe de instrução condicional

Esta tabela e a lista a seguir resumem a sintaxe a ser usada em expressões condicionais.

Item Syntax
value symbol | literal | integer
comparison-operator < | > | <= | >= | = | <>
Termo value | value comparison-operator value | ( expression )|
Boolean-factor term | NOT term
Boolean-term Boolean-factor | Boolean-factor AND term
expressão Boolean-term | Boolean-term OR expression
símbolo property | %environment-variable | $component-action | ?component-state | &feature-action | !feature-state

 

  • Os nomes e valores de símbolo diferenciam maiúsculas e minúsculas.

  • Os nomes das variáveis de ambiente não diferenciam maiúsculas de minúsculas.

  • O texto literal deve ser colocado entre aspas ("text").

    Observação

    O texto literal que contém aspas não pode ser usado em instruções condicionais, pois não há caractere de escape para aspas dentro do texto literal. Para fazer uma comparação com o texto literal que contém aspas, o texto literal deve ser colocado em uma propriedade. Por exemplo, para verificar se a propriedade SERVERNAME não contém aspas, defina uma propriedade chamada QUOTES na tabela Property com um valor de " e altere a condição para NOT SERVERNAME><QUOTES.

     

  • Os valores de propriedade inexistentes são tratados como cadeias de caracteres vazias.

  • Não há suporte para valores numéricos de ponto flutuante.

  • Os operadores e a precedência são os mesmos das linguagens BASIC e SQL.

  • Não há suporte para operadores aritméticos.

  • Parênteses podem ser usados para substituir a precedência do operador.

  • Os operadores não diferenciam letras maiúsculas de minúsculas.

  • Para comparações de cadeia de caracteres, um bloco "~" prefixado para o operador executa uma comparação que não diferencia maiúsculas de minúsculas.

  • A comparação de um inteiro com uma cadeia de caracteres ou valor de propriedade que não pode ser convertido em um inteiro é sempre msiEvaluateConditionFalse, exceto para o operador de comparação "<>", que retorna msiEvaluateConditionTrue.

Prefixos de acesso

A tabela a seguir mostra os prefixos a serem usados para acessar várias informações do sistema e do instalador para uso em expressões condicionais.

Tipo de símbolo Prefixo Valor
Propriedade Installer (nenhum) Valor da tabela de propriedade (Property).
Variável de ambiente % O valor da variável de ambiente.
Chave da tabela Component $ O estado de ação do componente.
Chave da tabela Component ? Estado instalado do componente.
Chave da tabela Feature & O estado de ação do recurso.
Chave da tabela Feature ! Estado instalado do recurso.

 

Operadores lógicos

A tabela a seguir mostra os operadores lógicos em expressões condicionais, em ordem de precedência de alta a baixa.

Operador Significado
Not Operador unário de prefixo; inverte o estado do termo a seguir.
And TRUE, se ambos os termos forem TRUE.
Ou TRUE, se um ou ambos os termos forem TRUE.
Xor TRUE, se um dos termos for TRUE, mas não ambos.
Eqv TRUE, se ambos os termos forem TRUE ou ambos os termos forem FALSE.
Imp TRUE, se o termo à esquerda for FALSE ou o termo à direita for TRUE.

 

Operadores comparativos

A tabela a seguir mostra os operadores de comparação usados em expressões condicionais. Esses operadores de comparação só podem ocorrer entre dois valores.

Operador Significado
= TRUE, se o valor à esquerda for igual ao valor à direita.
<> TRUE, se o valor à esquerda não for igual ao valor à direita.
> TRUE, se o valor à esquerda for maior que o valor à direita.
>= TRUE, se o valor à esquerda for maior que ou igual ao valor à direita.
< TRUE, se o valor à esquerda for menor que o valor à direita.
<= TRUE, se o valor à esquerda for menor que ou igual ao valor à direita.

 

Operadores de subcadeia de caracteres

A tabela a seguir mostra os operadores de subcadeia usados em expressões condicionais. Os operadores de subcadeia de caracteres podem ocorrer entre dois valores de cadeia de caracteres.

Operador Significado
>< TRUE, se a cadeia de caracteres à esquerda contiver a cadeia de caracteres à direita.
<< TRUE, se a cadeia de caracteres à esquerda começar com a cadeia de caracteres à direita.
>> TRUE, se a cadeia de caracteres à esquerda terminar com a cadeia de caracteres à direita.

 

Operadores numéricos bit a bit

A tabela a seguir mostra os operadores numéricos bit a bit em expressões condicionais. Esses operadores podem ocorrer entre dois valores inteiros.

Operador Significado
>< AND bit a bit, TRUE, se os inteiros à esquerda e à direita tiverem alguns bits em comum.
<< True, se os 16 bits altos do inteiro à esquerda forem iguais ao inteiro à direita.
>> True, se os 16 bits baixos do inteiro à esquerda forem iguais ao inteiro à direita.

 

Valores de Estados do Recurso e do Componente

A tabela a seguir mostra onde é válido usar os símbolos de operador de recurso e componente.

<Estado> do operador Onde essa sintaxe é válida
$component-action Na tabela Condition e nas tabelas de sequência, após a ação CostFinalize.
&feature-action Na tabela Condition e nas tabelas de sequência, após a ação CostFinalize.
!feature-state Na tabela Condition e nas tabelas de sequência, após a ação CostFinalize.
?component-state Na tabela Condition e nas tabelas de sequência, após a ação CostFinalize.

 

A tabela a seguir mostra os valores de estado do recurso e do componente usados em expressões condicionais. Esses estados não são definidos até que MsiSetInstallLevel seja chamado, diretamente ou pela ação CostFinalize.

Estado Valor Significado
INSTALLSTATE_UNKNOWN -1 Nenhuma ação a ser tomada no recurso ou componente.
INSTALLSTATE_ADVERTISED 1 Recurso anunciado. Esse estado não está disponível para componentes.
INSTALLSTATE_ABSENT 2 O recurso ou componente não está presente.
INSTALLSTATE_LOCAL 3 Recurso ou componente no computador local.
INSTALLSTATE_SOURCE 4 Recurso ou componente executado na origem.

 

Por exemplo, a expressão condicional "&MyFeature=3" será avaliada como True, somente se MyFeature estiver mudando do estado atual para o estado de ser instalado no computador local, INSTALLSTATE_LOCAL.

Observe que você não deve depender da condição $Component1=3 para verificar se o Component1 está instalado localmente no computador. Isso poderá falhar se o Component1 estiver instalado por mais de um produto. Depois que Component1 tiver sido instalado localmente pelo Product1, o instalador avaliará a condição $Component 1=3 como False durante a instalação do Product2. Isso ocorre porque o instalador determina a versão do componente usando o caminho de chave do componente e marca o componente para instalação, se sua versão for maior que ou igual ao componente instalado.

Observe que o instalador não fará comparações diretas do tipo de dados Version em instruções condicionais. Por exemplo, você não pode usar operadores comparativos para comparar versões como "01.10" e "1.010" em uma instrução condicional. Em vez disso, use um método válido para pesquisar uma versão, como descrito em Como pesquisar aplicativos existentes, arquivos, entradas de registro ou entradas de arquivo .ini e, em seguida, defina uma propriedade.

Como usar propriedades em instruções condicionais