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.
Zugehörige Themen