條件語句語法
本節說明 MsiEvaluateCondition 函式所使用的條件語句語法,以及 的動作序列數據表。 如需詳細資訊,請參閱 條件語句語法範例。
條件語句語法的摘要
下表和下列清單摘要說明在條件表達式中使用的語法。
專案 | 語法 |
---|---|
價值 | 符號 |literal |整數 |
comparison-operator | < |> |<= |>= |= |<> |
術語 | value |value comparison-operator value |( 運算式 )| |
布爾因數 | term |NOT 字詞 |
布爾值字詞 | 布爾因數 |布爾因數 AND 字詞 |
表達 | 布爾值字詞 |布爾字詞 OR 表示式 |
象徵 | 屬性 |%environment-variable |$component-action | ?component-state |&feature-action | !feature-state |
符號名稱和值會區分大小寫。
環境變數名稱不區分大小寫。
常值文字必須以引號 (“text” ) 括住。
注意
包含引號的常值文字不能用於條件語句中,因為常值文字中沒有引號的逸出字元。 若要比較包含引號的常值文字,常值文字應該放在 屬性中。 例如,若要確認 SERVERNAME 屬性不包含任何引號,請在 屬性數據表中定義名為 QUOTES 的屬性, 值為 “,並將條件變更為 NOT SERVERNAME><QUOTES。
不存在的屬性值會被視為空字串。
不支援浮點數值。
運算子和優先順序與 BASIC 和 SQL 語言相同。
不支持算術運算子。
括號可用來覆寫運算符優先順序。
運算子不區分大小寫。
針對字串比較,前置詞為 運算符的tilde “~” 會執行不區分大小寫的比較。
將整數與無法轉換成整數的字串或屬性值進行比較,一律 msiEvaluateConditionFalse,但比較運算符 “<>” 除外,它會傳回 msiEvaluateConditionTrue。
存取前置詞
下表顯示用來存取各種系統和安裝程式資訊的前置詞,以用於條件表達式。
符號類型 | 前綴 | 價值 |
---|---|---|
Installer 屬性 | (無) | 屬性值 (Property) 資料表。 |
環境變數 | % | 環境變數的值。 |
元件數據表索引鍵 | $ | 元件的動作狀態。 |
元件數據表索引鍵 | ? | 元件的已安裝狀態。 |
功能數據表索引鍵 | & | 功能的動作狀態。 |
功能數據表索引鍵 | ! | 功能已安裝的狀態。 |
邏輯運算子
下表顯示條件表達式中的邏輯運算符,優先順序高到低。
算子 | 意義 |
---|---|
不 | 前置詞一元運算符;反轉下列字詞的狀態。 |
和 | 如果這兩個詞彙都是 TRUE,則為 TRUE。 |
或 | 如果任一或兩個詞彙都是 TRUE,則為 TRUE。 |
異或 | 如果兩個詞彙都為TRUE,則為TRUE。 |
Eqv | 如果兩個詞彙都是 TRUE,或兩個詞彙都是 FALSE,則為 TRUE。 |
小鬼 | 如果左字詞為 FALSE 或右字詞為 TRUE,則為 TRUE。 |
比較運算子
下表顯示條件表示式中使用的比較運算元。 這些比較運算子只能在兩個值之間發生。
算子 | 意義 |
---|---|
= | 如果左值等於右值,則為TRUE。 |
<> | 如果左值不等於右值,則為TRUE。 |
> | 如果左值大於右值,則為TRUE。 |
>= | 如果左值大於或等於右值,則為TRUE。 |
< | 如果左值小於右值,則為TRUE。 |
<= | 如果左值小於或等於右值,則為TRUE。 |
子字串運算子
下表顯示條件表示式中使用的子字串運算符。 子字串運算子可以在兩個字串值之間發生。
算子 | 意義 |
---|---|
>< | 如果左字串包含右字串,則為TRUE。 |
<< | 如果左字串以右字串開頭,則為TRUE。 |
>> | 如果左字串以右字串結尾,則為TRUE。 |
位數值運算子
下表顯示條件表示式中的位數值運算元。 這些運算子可以在兩個整數值之間發生。
算子 | 意義 |
---|---|
>< | 位 AND,如果左右整數有任何一般位,則為 TRUE。 |
<< | 如果左整數的高 16 位等於右整數,則為 True。 |
>> | 如果左整數的低 16 位等於右整數,則為 True。 |
功能與元件狀態值
下表顯示使用功能和元件運算符號的有效位置。
運算子 <狀態> | 此語法有效之處 |
---|---|
$component動作 | 在 Condition 數據表中,以及 順序 數據表中,CostFinalize 動作之後。 |
&功能動作 | 在 Condition 數據表中,以及 順序 數據表中,CostFinalize 動作之後。 |
!feature-state | 在 Condition 數據表中,以及 順序 數據表中,CostFinalize 動作之後。 |
?component-state | 在 Condition 數據表中,以及 順序 數據表中,CostFinalize 動作之後。 |
下表顯示條件表示式中使用的功能和元件狀態值。 除非直接呼叫 msiSetInstallLevel,或由 CostFinalize 動作,否則不會設定這些狀態。
州 | 價值 | 意義 |
---|---|---|
INSTALLSTATE_UNKNOWN | -1 | 在功能或元件上不採取任何動作。 |
INSTALLSTATE_ADVERTISED | 1 | 已公告的功能。 此狀態不適用於元件。 |
INSTALLSTATE_ABSENT | 2 | 功能或元件不存在。 |
INSTALLSTATE_LOCAL | 3 | 本機電腦上的功能或元件。 |
INSTALLSTATE_SOURCE | 4 | 從來源執行功能或元件。 |
例如,只有當 MyFeature 從目前狀態變更為本機計算機上安裝的狀態時,條件表達式 「&MyFeature=3」 才會評估為 True,INSTALLSTATE_LOCAL。
請注意,您不應該根據條件$Component 1=3 來檢查是否在本機計算機上安裝 Component1。 如果 Component1 是由一個以上的產品安裝,這可能會失敗。 在 Product1 在本機安裝 Component1 之後,安裝程式會將 Product2 安裝期間的條件評估為 false $Component 1=3。 這是因為安裝程式會使用元件的金鑰路徑來判斷元件的版本,如果元件的版本大於或等於已安裝的元件,則會標示元件進行安裝。
請注意,安裝程式不會在條件語句中直接比較 Version 數據類型。 例如,您無法使用比較運算符來比較條件語句中的 「01.10」 和 「1.010」 等版本。 請改用有效的方法來搜尋版本,例如 搜尋現有的應用程式、檔案、登錄專案或 .ini 檔案專案,然後設定屬性。
相關主題