Compartilhar via


Sintaxe de instrução condicional

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

Resumo da sintaxe da instrução condicional

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

Item Sintaxe
valor símbolo | literal | inteiro
operador de comparação < | > | <= | >= | = | <>
prazo value | valor do operador de comparação | ( expressão )|
Fator booliano termo | não termo
Termo booliano Fator booliano | Termos de E de fator booliano
expressão Termo booliano | Expressão or de de termos boolianos
símbolo propriedade | %environment-variable | $component-action | ?component-state | &feature-action | !feature-state

 

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

  • Nomes de variáveis de ambiente não diferenciam maiúsculas de minúsculas.

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

    Nota

    Texto literal que contém aspas não pode ser usado em instruções condicionais porque não há nenhum 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.

     

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

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

  • Operadores e precedência são os mesmos que nos idiomas 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 maiúsculas de minúsculas.

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

  • A comparação de um inteiro com um valor de cadeia de caracteres ou 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 propriedade (Property) tabela.
Variável de ambiente % Valor da variável de ambiente.
Chave da tabela de componentes $ Estado de ação do componente.
Chave da tabela de componentes ? Estado instalado do componente.
Chave da tabela de recursos & Estado de ação do recurso.
Chave da tabela de recursos ! 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 alta a baixa.

Operador Significado
Não Operador unário de prefixo; inverte o estado do termo a seguir.
E TRUE se ambos os termos forem TRUE.
Ou TRUE se um ou ambos os termos forem TRUE.
Xor TRUE se ambos, mas não ambos os termos, forem VERDADEIROs.
Eqv TRUE se ambos os termos forem TRUE ou ambos os termos forem FALSE.
Diabrete TRUE se o termo esquerdo 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 esquerdo for igual ao valor à direita.
<> TRUE se o valor esquerdo não for igual ao valor à direita.
> TRUE se o valor esquerdo for maior que o valor direito.
>= TRUE se o valor esquerdo for maior ou igual ao valor à direita.
< TRUE se o valor esquerdo for menor que o valor direito.
<= TRUE se o valor esquerdo for menor ou igual ao valor à direita.

 

Operadores de subcadeia de caracteres

A tabela a seguir mostra os operadores de subcadeia de caracteres 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 esquerdo e direito tiverem alguns bits em comum.
<< True se os 16 bits altos do inteiro esquerdo forem iguais ao inteiro direito.
>> True se os 16 bits baixos do inteiro esquerdo forem iguais ao inteiro direito.

 

Valores de estado de componente e recurso

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

Operador <> de estado Onde essa sintaxe é válida
$component ação Na tabela condição de e nas tabelas de sequência de, após a ação CostFinalize.
&ação do recurso Na tabela condição de e nas tabelas de sequência de, após a ação CostFinalize.
!feature-state Na tabela condição de e nas tabelas de sequência de, após a ação CostFinalize.
?component-state Na tabela condição de e nas tabelas de sequência de, 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 execução de componente da origem.

 

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

Observe que você não deve depender da condição $Component 1=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 o 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 ou igual ao componente instalado.

Observe que o instalador não fará comparações diretas do tipo de dados Versão 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 Pesquisando aplicativos existentes, arquivos, entradas de registro ou .ini entradas de arquivoe, em seguida, definir uma propriedade.

usando propriedades em instruções condicionais