Sintassi dell'istruzione condizionale

Questa sezione descrive la sintassi delle istruzioni condizionali usate dalla funzione MsiEvaluateCondition e dalle tabelle della sequenza di azioni. Per altre informazioni, vedere Esempi di sintassi dell'istruzione condizionale.

Riepilogo della sintassi dell'istruzione condizionale

Questa tabella e l'elenco seguente riepilogano la sintassi da usare nelle espressioni condizionali.

Articolo Sintassi
value simbolo | valore letterale | Intero
Operatore di confronto < | > | <= | >= | = | <>
Termine di value | valore dell'operatore di confronto dei valori | ( espressione )|
Fattore booleano termine | NOT term
Termine booleano Fattore booleano | Termine AND a fattore booleano
expression Termine booleano | Espressione OR a termine booleano
simbolo property | %environment-variable | $component-azione | ?stato componente | &feature-action | !feature-state

 

  • I nomi e i valori dei simboli fanno distinzione tra maiuscole e minuscole.

  • I nomi delle variabili di ambiente non fanno distinzione tra maiuscole e minuscole.

  • Il testo letterale deve essere racchiuso tra virgolette ("testo").

    Nota

    Il testo letterale contenente virgolette non può essere usato nelle istruzioni condizionali perché non esiste alcun carattere di escape per le virgolette all'interno del testo letterale. Per eseguire un confronto con il testo letterale contenente virgolette, il testo letterale deve essere inserito in una proprietà . Ad esempio, per verificare che la proprietà edizione Standard RVERNAME non contenga virgolette, definire una proprietà denominata QUOTES nella tabella Property con un valore " e modificare la condizione in NOT edizione Standard RVERNAME><QUOTES.

     

  • I valori delle proprietà inesistente vengono considerati come stringhe vuote.

  • I valori numerici a virgola mobile non sono supportati.

  • Gli operatori e la precedenza sono gli stessi dei linguaggi BASIC e SQL.

  • Gli operatori aritmetici non sono supportati.

  • Le parentesi possono essere usate per sostituire la precedenza dell'operatore.

  • Gli operatori non fanno distinzione tra maiuscole e minuscole.

  • Per i confronti di stringhe, una tilde "~" preceduta dall'operatore esegue un confronto che non fa distinzione tra maiuscole e minuscole.

  • Il confronto di un numero intero con un valore stringa o di proprietà che non può essere convertito in un numero intero è sempre msiEvaluateConditionFalse, ad eccezione dell'operatore di confronto "<>", che restituisce msiEvaluateConditionTrue.

Prefissi di accesso

Nella tabella seguente vengono illustrati i prefissi da usare per accedere a varie informazioni sul sistema e sul programma di installazione da usare nelle espressioni condizionali.

Tipo di simbolo Prefisso Valore
Proprietà del programma di installazione (nessuno) Valore della tabella property (Property).
Variabile di ambiente % Valore della variabile di ambiente.
Chiave della tabella dei componenti $ Stato dell'azione del componente.
Chiave della tabella dei componenti ? Stato installato del componente.
Chiave della tabella delle funzionalità & Stato di azione della funzionalità.
Chiave della tabella delle funzionalità ! Stato installato della funzionalità.

 

Operatori logici

La tabella seguente illustra gli operatori logici nelle espressioni condizionali, in ordine di precedenza alta-bassa.

Operatore Significato
Not Operatore unario prefisso; inverte lo stato del termine seguente.
And TRUE se entrambi i termini sono TRUE.
O TRUE se uno o entrambi i termini sono TRUE.
Xor TRUE se entrambi i termini, ma non entrambi, sono TRUE.
Eqv TRUE se entrambi i termini sono TRUE o entrambi i termini sono FAL edizione Standard.
Imp TRUE se il termine sinistro è FAL edizione Standard o il termine destro è TRUE.

 

Operatori comparativi

Nella tabella seguente vengono illustrati gli operatori di confronto usati nelle espressioni condizionali. Questi operatori di confronto possono verificarsi solo tra due valori.

Operatore Significato
= TRUE se il valore sinistro è uguale al valore destro.
<> TRUE se il valore sinistro non è uguale al valore destro.
> TRUE se il valore sinistro è maggiore del valore destro.
>= TRUE se il valore sinistro è maggiore o uguale al valore destro.
< TRUE se il valore sinistro è minore del valore destro.
<= TRUE se il valore sinistro è minore o uguale al valore destro.

 

Operatori di sottostringa

Nella tabella seguente vengono illustrati gli operatori di sottostringa usati nelle espressioni condizionali. Gli operatori di sottostringa possono verificarsi tra due valori stringa.

Operatore Significato
>< TRUE se la stringa sinistra contiene la stringa destra.
<< TRUE se la stringa sinistra inizia con la stringa destra.
>> TRUE se la stringa sinistra termina con la stringa destra.

 

Operatori numerici bit per bit

Nella tabella seguente vengono illustrati gli operatori numerici bit per bit nelle espressioni condizionali. Questi operatori possono verificarsi tra due valori interi.

Operatore Significato
>< AND bit per bit, TRUE se gli interi sinistro e destro hanno bit in comune.
<< True se i 16 bit alti dell'intero sinistro sono uguali all'intero destro.
>> True se i 16 bit bassi dell'intero sinistro sono uguali all'intero destro.

 

Valori relativi allo stato della funzionalità e del componente

Nella tabella seguente viene illustrato dove è valido usare i simboli dell'operatore feature e component.

Stato dell'operatore <> Dove questa sintassi è valida
$component-azione Nella tabella Condizione e nelle tabelle di sequenza, dopo l'azione CostFinalize.
&feature-action Nella tabella Condizione e nelle tabelle di sequenza, dopo l'azione CostFinalize.
!feature-state Nella tabella Condizione e nelle tabelle di sequenza, dopo l'azione CostFinalize.
?stato componente Nella tabella Condizione e nelle tabelle di sequenza, dopo l'azione CostFinalize.

 

Nella tabella seguente vengono illustrati i valori di stato delle funzionalità e dei componenti usati nelle espressioni condizionali. Questi stati non vengono impostati finché non viene chiamato MsiSetInstallLevel, direttamente o dall'azione CostFinalize.

Provincia Valore Significato
INSTALLSTATE_UNKNOWN -1 Nessuna azione da eseguire sulla funzionalità o sul componente.
INSTALLSTATE_ADVERTIedizione Standard D 1 Funzionalità annunciata. Questo stato non è disponibile per i componenti.
INSTALLSTATE_ABedizione Standard NT 2 La funzionalità o il componente non è presente.
INSTALLSTATE_LOCAL 3 Funzionalità o componente nel computer locale.
INSTALLSTATE_SOURCE 4 Funzionalità o componente eseguiti dall'origine.

 

Ad esempio, l'espressione condizionale "&MyFeature=3" restituisce True solo se MyFeature passa dallo stato corrente allo stato di essere installato nel computer locale, INSTALLSTATE_LOCAL.

Si noti che non è consigliabile dipendere dalla condizione $Component 1=3 per verificare se Component1 è installato localmente nel computer. Questo errore può avere esito negativo se Component1 è installato da più prodotti. Dopo che Component1 è stato installato localmente da Product1, il programma di installazione valuta la condizione $Component 1=3 come False durante l'installazione di Product2. Ciò avviene perché il programma di installazione determina la versione del componente usando il percorso della chiave del componente e contrassegna il componente per l'installazione se la versione è maggiore o uguale al componente installato.

Si noti che il programma di installazione non eseguirà confronti diretti del tipo di dati Version nelle istruzioni condizionali. Ad esempio, non è possibile usare operatori comparativi per confrontare versioni come "01.10" e "1.010" in un'istruzione condizionale. Usare invece un metodo valido per cercare una versione, ad esempio descritta in Ricerca di applicazioni, file, voci del Registro di sistema o voci di file ini e quindi impostare una proprietà.

Uso delle proprietà nelle istruzioni condizionali