Syntax für bedingte Anweisungen

In diesem Abschnitt wird die Syntax von bedingten Anweisungen beschrieben, die von der MsiEvaluateCondition-Funktion und den Sequenztabellen für Aktionen verwendet werden. Weitere Informationen finden Sie unter Beispiele für die Syntax bedingter Anweisungen.

Übersicht über die Syntax für bedingte Anweisungen

Diese Tabelle und die folgende Liste enthalten eine Übersicht über die Syntax, die in bedingten Ausdrücken verwendet werden muss.

Element Syntax
value Symbol | Literal | Ganzzahl
Vergleichsoperator < | > | <= | >= | = | <>
Begriff Wert | Wertvergleichsoperatorwert | (Ausdruck)
Boolescher Faktor Term | NOT Term
Boolescher Term Boolescher Faktor | Boolescher Faktor AND Term
expression Boolescher Term | Boolescher Term OR Ausdruck
Symbol Eigenschaft | %Umgebungsvariable | $Komponentenaktion | ?Komponentenzustand | &Featureaktion | !Featurezustand

 

  • Bei Symbolnamen und -werten wird zwischen Groß- und Kleinschreibung unterschieden.

  • Bei Namen von Umgebungsvariablen wird nicht zwischen Groß- und Kleinschreibung unterschieden.

  • Literaltext muss in Anführungszeichen ("Text") stehen.

    Hinweis

    Literaltext, der Anführungszeichen enthält, kann in bedingten Anweisungen nicht verwendet werden, da es kein Escapezeichen für Anführungszeichen in Literaltext gibt. Um einen Vergleich mit Literaltext mit Anführungszeichen durchzuführen, sollte der Literaltext in eine Eigenschaft eingefügt werden. Um beispielsweise zu überprüfen, ob die SERVERNAME-Eigenschaft keine Anführungszeichen enthält, definieren Sie eine Eigenschaft namens QUOTES in der Property-Tabelle mit dem Wert " und ändern Sie die Bedingung in NOT SERVERNAME><QUOTES.

     

  • Nicht vorhandene Eigenschaftswerte werden als leere Zeichenfolgen behandelt.

  • Numerische Gleitkommawerte werden nicht unterstützt.

  • Operatoren und Rangfolge sind identisch mit denen in den Sprachen BASIC und SQL.

  • Arithmetische Operatoren werden nicht unterstützt.

  • Mithilfe von Klammern kann die Operatorrangfolge außer Kraft gesetzt werden.

  • Bei Operatoren wird nicht zwischen Groß- und Kleinschreibung unterschieden.

  • Bei Zeichenfolgenvergleichen bewirkt eine Tilde „~“ als Präfix vor dem Operator, dass beim Vergleich nicht zwischen Groß- und Kleinschreibung unterschieden.

  • Beim Vergleich einer ganzen Zahl mit einem Zeichenfolgen- oder Eigenschaftswert, der nicht in eine ganze Zahl konvertiert werden kann, wird immer msiEvaluateConditionFalse zurückgegeben (außer beim Vergleichsoperator <>, bei dem msiEvaluateConditionTrue zurückgegeben wird).

Zugriffspräfixe

In der folgenden Tabelle sind die Präfixe aufgeführt, die für den Zugriff auf verschiedene System- und Installationsinformationen für die Verwendung in bedingten Ausdrücken verwendet werden können.

Symboltyp Präfix Wert
Installer-Eigenschaft (none) Wert der Eigenschaft (Property-Tabelle).
Umgebungsvariable % Wert der Umgebungsvariablen.
Component-Tabellenschlüssel $ Aktionszustand der Komponente.
Component-Tabellenschlüssel ? Installationszustand der Komponente.
Feature-Tabellenschlüssel & Aktionszustand des Features.
Feature-Tabellenschlüssel ! Installationszustand des Features.

 

Logische Operatoren

In der folgenden Tabelle sind die logischen Operatoren in bedingten Ausdrücken in der Reihenfolge ihrer Rangfolge von hoch nach niedrig angezeigt.

Operator Bedeutung
Not Unärer Präfixoperator; invertiert den Zustand des folgenden Ausdrucks.
And TRUE, wenn beide Terme TRUE sind.
oder TRUE, wenn einer der beiden Terme TRUE ist.
Xor TRUE, wenn nur einer der beiden Terme TRUE ist.
Eqv TRUE, wenn beide Terme TRUE oder beide Terme FALSE sind.
Imp TRUE, wenn der linke Term FALSE oder der rechte Term TRUE ist.

 

Vergleichsoperatoren

In der folgenden Tabelle sind die Vergleichsoperatoren aufgeführt, die in bedingten Ausdrücken verwendet werden. Diese Vergleichsoperatoren können nur zwischen zwei Werten stehen.

Operator Bedeutung
= TRUE, wenn der linke Wert gleich dem rechten Wert ist.
<> TRUE, wenn der linke Wert nicht gleich dem rechten Wert ist.
> TRUE, wenn der linke Wert größer als der rechte Wert ist.
>= TRUE, wenn der linke Wert größer-gleich dem rechten Wert ist.
< TRUE, wenn der linke Wert kleiner als der rechte Wert ist.
<= TRUE, wenn der linke Wert kleiner-gleich dem rechten Wert ist.

 

Operatoren für Teilzeichenfolgen

In der folgenden Tabelle sind die Operatoren für Teilzeichenfolgen aufgeführt, die in bedingten Ausdrücken verwendet werden. Operatoren für Teilzeichenfolgen können zwischen zwei Zeichenfolgenwerten stehen.

Operator Bedeutung
>< TRUE, wenn die linke Zeichenfolge die rechte Zeichenfolge enthält.
<< TRUE, wenn die linke Zeichenfolge mit der rechten Zeichenfolge beginnt.
>> TRUE, wenn die linke Zeichenfolge mit der rechten Zeichenfolge endet.

 

Bitweise numerische Operatoren

In der folgenden Tabelle sind die bitweisen numerischen Operatoren in bedingten Ausdrücken aufgeführt. Diese Operatoren können zwischen zwei ganzzahligen Werten stehen.

Operator Bedeutung
>< Bitweises AND. TRUE, wenn die linken und rechten Ganzzahlen gemeinsame Bits aufweisen.
<< TRUE, wenn die höherwertigen 16 Bits der linken Ganzzahl gleich der rechten Ganzzahl sind.
>> TRUE, wenn die niederwertigen 16 Bits der linken Ganzzahl gleich der rechten Ganzzahl sind.

 

Zustandswerte für Features und Komponenten

Die folgende Tabelle veranschaulicht, wo die Verwendung der Operatorsymbole für Features und Komponenten zulässig ist.

Operator <Zustand> Wo diese Syntax zulässig ist
$Komponentenaktion In der Condition-Tabelle und in den Sequenztabellen nach der CostFinalize-Aktion.
&Featureaktion In der Condition-Tabelle und in den Sequenztabellen nach der CostFinalize-Aktion.
!Featurezustand In der Condition-Tabelle und in den Sequenztabellen nach der CostFinalize-Aktion.
?Komponentenzustand In der Condition-Tabelle und in den Sequenztabellen nach der CostFinalize-Aktion.

 

Die folgende Tabelle veranschaulicht die In bedingten Ausdrücken verwendeten Zustandswerte für Features und Komponenten. Diese Zustände werden erst festgelegt, wenn MsiSetInstallLevel direkt oder durch die CostFinalize-Aktion aufgerufen wird.

State Wert Bedeutung
INSTALLSTATE_UNKNOWN -1 Es muss keine Aktion für das Feature oder die Komponente ausgeführt werden.
INSTALLSTATE_ADVERTISED 1 Feature angekündigt. Dieser Zustand ist für Komponenten nicht verfügbar.
INSTALLSTATE_ABSENT 2 Feature oder Komponente ist nicht vorhanden.
INSTALLSTATE_LOCAL 3 Feature oder Komponente auf dem lokalen Computer.
INSTALLSTATE_SOURCE 4 Das Feature oder die Komponente wird von der Quelle aus ausgeführt.

 

Der bedingte Ausdruck „&MyFeature=3“ wird beispielsweise nur dann in TRUE ausgewertet, wenn MyFeature vom aktuellen Zustand in den Installationszustand auf dem lokalen Computer, INSTALLSTATE_LOCAL, wechselt.

Beachten Sie, dass Sie nicht von der Bedingung „$Component1=3“ abhängig sein sollten, um festzustellen, ob Component1 lokal auf dem Computer installiert ist. Dies kann fehlschlagen, wenn Component1 von mehr als einem Produkt installiert wird. Nachdem Component1 von Product1 lokal installiert wurde, wertet das Installationsprogramm die Bedingung „$Component 1=3“ bei der Installation von Product2 als FALSE aus. Dies liegt daran, dass das Installationsprogramm die Version der Komponente anhand des Schlüsselpfads der Komponente bestimmt und die Komponente für die Installation markiert, wenn ihre Version größer-gleich der installierten Komponente ist.

Beachten Sie, dass das Installationsprogramm in bedingten Anweisungen keine direkten Vergleiche für den Version-Datentyp ausführt. Sie können beispielsweise keine Vergleichsoperatoren verwenden, um Versionen wie „01.10“ und „1.010“ in einer bedingten Anweisung zu vergleichen. Verwenden Sie stattdessen eine gültige Suchmethode für Versionen (siehe Beschreibung in Suchen nach vorhandenen Anwendungen, Dateien, Registrierungseinträgen oder INI-Dateieinträgen), und legen Sie dann eine Eigenschaft fest.

Verwenden von Eigenschaften in bedingten Anweisungen