Freigeben über


Syntax der bedingten Anweisung

In diesem Abschnitt werden die Syntax der bedingten Anweisungen beschrieben, die von der MsiEvaluateCondition Funktion und der Aktion Sequenztabellenverwendet werden. Weitere Informationen finden Sie unter Beispiele für die Syntax der bedingten Anweisung.

Zusammenfassung der Syntax der bedingten Anweisung

Diese Tabelle und die folgende Liste fassen die Syntax zusammen, die in bedingten Ausdrücken verwendet werden soll.

Artikel Syntax
Wert Symbol | Literal | ganze Zahl
Vergleichsoperator < | > | <= | >= | = | <>
Ausdruck Wert | Wertvergleichsoperatorwert | ( Ausdruck )|
Boolescher Faktor Ausdruck | NICHT Ausdruck
Boolescher Ausdruck Boolescher Faktor | Boolescher UND Ausdruck
Ausdruck Boolescher Ausdruck | Boolescher Ausdruck ODER Ausdruck
Symbol eigenschaft | %environment-Variable | $component aktion | ?component-state | &Featureaktion | !feature-state

 

  • Bei Symbolnamen und Werten wird die Groß-/Kleinschreibung beachtet.

  • Bei Namen von Umgebungsvariablen wird die Groß-/Kleinschreibung nicht beachtet.

  • Literaltext muss zwischen Anführungszeichen ("Text") eingeschlossen werden.

    Anmerkung

    Literaltext mit Anführungszeichen kann in bedingten Anweisungen nicht verwendet werden, da es kein Escapezeichen für Anführungszeichen innerhalb von Literaltext gibt. Wenn Sie einen Vergleich mit Literaltext durchführen möchten, der Anführungszeichen enthält, sollte der Literaltext in eine Eigenschaft gesetzt werden. Um beispielsweise zu überprüfen, ob die SERVERNAME-Eigenschaft keine Anführungszeichen enthält, definieren Sie eine Eigenschaft namens QUOTES in der tabelle Eigenschaft 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 den SPRACHEN BASIC und SQL.

  • Arithmetische Operatoren werden nicht unterstützt.

  • Klammern können verwendet werden, um die Rangfolge des Operators außer Kraft zu setzen.

  • Bei Operatoren wird die Groß-/Kleinschreibung nicht beachtet.

  • Bei Zeichenfolgenvergleichen führt eine Tilde "~", die dem Operator vorangestellt ist, einen Vergleich aus, bei dem die Groß-/Kleinschreibung nicht beachtet wird.

  • Der Vergleich einer ganzen Zahl mit einem Zeichenfolgen- oder Eigenschaftswert, der nicht in eine ganze Zahl konvertiert werden kann, ist immer msiEvaluateConditionFalse, mit Ausnahme des Vergleichsoperators "<>", der msiEvaluateConditionTruezurückgibt.

Zugriffspräfixe

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

Symboltyp Präfix Wert
Installer-Eigenschaft (keine) Wert der Eigenschaft (Property) Tabelle.
Umgebungsvariable % Wert der Umgebungsvariable.
Komponententabellenschlüssel $ Aktionszustand der Komponente.
Komponententabellenschlüssel ? Installierter Zustand der Komponente.
Featuretabellenschlüssel & Aktionsstatus des Features.
Featuretabellenschlüssel ! Installierter Status des Features.

 

Logische Operatoren

In der folgenden Tabelle sind die logischen Operatoren in bedingten Ausdrücken in Der Reihenfolge von hoher bis niedriger Rangfolge dargestellt.

Operator Bedeutung
Nicht Präfix unärer Operator; invertiert den Status des folgenden Ausdrucks.
Und TRUE, wenn beide Begriffe WAHR sind.
Oder TRUE, wenn beide Begriffe WAHR sind.
Xor TRUE, wenn beide Begriffe jedoch nicht WAHR sind.
Eqv WAHR, wenn beide Begriffe WAHR sind oder beide Ausdrücke FALSCH sind.
Kobold WAHR, wenn der linke Ausdruck FALSCH oder der rechte Ausdruck WAHR 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 auftreten.

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 oder gleich dem rechten Wert ist.
< TRUE, wenn der linke Wert kleiner als der rechte Wert ist.
<= TRUE, wenn der linke Wert kleiner oder gleich dem rechten Wert ist.

 

Operatoren für Teilzeichenfolgen

In der folgenden Tabelle sind die Teilzeichenfolgenoperatoren aufgeführt, die in bedingten Ausdrücken verwendet werden. Teilzeichenfolgenoperatoren können zwischen zwei Zeichenfolgenwerten auftreten.

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

Die folgende Tabelle zeigt die bitweise numerischen Operatoren in bedingten Ausdrücken. Diese Operatoren können zwischen zwei ganzzahligen Werten auftreten.

Operator Bedeutung
>< Bitweise UND, WAHR, wenn die linke und rechte ganze Zahl alle Bits gemeinsam haben.
<< True, wenn die hohen 16-Bits der linken ganzzahligen Zahl gleich der rechten ganzen Zahl sind.
>> True, wenn die niedrigen 16-Bits der linken ganzzahligen Zahl gleich der rechten Ganzzahl sind.

 

Feature- und Komponentenstatuswerte

In der folgenden Tabelle wird gezeigt, wo sie gültig ist, um die Symbole für Feature- und Komponentenoperator zu verwenden.

Operator <Status> Wo diese Syntax gültig ist
$component-Aktion In der Tabelle Bedingung und in der Reihenfolge Tabellen nach der CostFinalize-Aktion.
&Featureaktion In der Tabelle Bedingung und in der Reihenfolge Tabellen nach der CostFinalize-Aktion.
!Featurestatus In der Tabelle Bedingung und in der Reihenfolge Tabellen nach der CostFinalize-Aktion.
?Component-State In der Tabelle Bedingung und in der Reihenfolge Tabellen nach der CostFinalize-Aktion.

 

In der folgenden Tabelle sind die Feature- und Komponentenstatuswerte aufgeführt, die in bedingten Ausdrücken verwendet werden. Diese Zustände werden erst festgelegt, wenn MsiSetInstallLevel aufgerufen wird, entweder direkt oder durch die CostFinalize Aktion.

Zustand Wert Bedeutung
INSTALLSTATE_UNKNOWN -1 Für das Feature oder die Komponente müssen keine Aktionen ausgeführt werden.
INSTALLSTATE_ADVERTISED 1 Angekündigte Funktion. 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 Feature oder Komponente wird aus der Quelle ausgeführt.

 

Der bedingte Ausdruck "&MyFeature=3" ergibt sich beispielsweise nur, wenn MyFeature von seinem aktuellen Zustand in den Zustand der Installation auf dem lokalen Computer wechselt, INSTALLSTATE_LOCAL.

Beachten Sie, dass Sie nicht von der Bedingung $Component 1=3 abhängen sollten, um zu überprüfen, ob Component1 lokal auf dem Computer installiert ist. Dies kann fehlschlagen, wenn Component1 von mehreren Produkten installiert wird. Nachdem Component1 lokal von Product1 installiert wurde, wertet das Installationsprogramm die Bedingung $Component 1=3 während der Installation von Product2 als False aus. Dies liegt daran, dass das Installationsprogramm die Version der Komponente mithilfe des Schlüsselpfads der Komponente bestimmt und die Komponente für die Installation kennzeichnet, wenn die Version größer oder gleich der installierten Komponente ist.

Beachten Sie, dass das Installationsprogramm keine direkten Vergleiche des Datentyps Version in bedingten Anweisungen vorgibt. Sie können z. B. keine vergleichenden Operatoren verwenden, um Versionen wie "01.10" und "1.010" in einer bedingungsbedingten Anweisung zu vergleichen. Verwenden Sie stattdessen eine gültige Methode, um nach einer Version zu suchen, z. B. 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