已格式化

格式化資料類型是用來解析內嵌屬性名稱、資料表索引鍵、環境變數參考和其他特殊子字串的文字字串。 可辨識下列慣例來解析字串:

  • 方括弧 ([ ]) 或大括弧 ({ }) 文字中沒有相符的字組。

  • 如果遇到表單 [propertyname] 的子字串,則會由 屬性的值取代。 如果 propertyname 不是有效的屬性名稱,則子字串會解析為空白。 例如, LaunchCondition 資料表 的 Description 資料行會採用格式化字串。 如果 ERRORTXT 已設定為 「請連絡您的支援人員」,則顯示失敗啟動條件的文字會包含此字串。 如果未設定 ERRORTXT,則顯示失敗啟動條件的文字只是「系統不符合安裝需求」。

    條件 描述
    Version9X 系統不符合安裝需求。 [ERRORTXT]

     

  • 方括弧可以逐一查看,而且屬性名稱會從內部解析。例如,假設子字串 [[PropertyA]] 出現在文字中。 首先,會擷取 PropertyA 屬性的值。 如果值是有效的屬性名稱,例如 PropertyB,則會擷取 PropertyB 的值,並將整個子字串 [[PropertyA]] 取代為 PropertyB 的值。 如果 PropertyA 不是有效的屬性名稱,或 PropertyA 的值不是有效的屬性名稱,則子字串為空白。

  • 如果找到表單 [%environmentvariable] 的子字串,環境變數的值會取代為子字串。

  • 如果找到表單 [\x] 的子字串,則會由 字元 x 取代,其中 x 是一個字元,而不需要進一步處理。 只保留反斜線之後的第一個字元;其他所有專案都會移除。 例如,若要包含常值左括弧 ([) ,請使用 [\[]。 文字 [\[]方括弧文字[\]] 會解析為 [方括弧文字]。

  • 如果子字串以大括弧 ({ }) 括住,而且它不包含在方括弧 ([ ]) 中,子字串會保持不變,包括大括弧。

  • 如果子字串以大括弧括住 ({ }) ,而且它包含一或多個以方括弧括住的屬性名稱, ([ ]) 則,如果所有屬性名稱都有效,則會顯示具有已解析替代) 的文字 (,而不會顯示大括弧。

  • 如果找到表單 [~] 的子字串,則會以 Null 字元取代。 這是用來在登錄資料表中撰寫REG_MULTI_SZ字元字串。 請注意,[~] 也可用來使用 Environment 資料表,將或前置詞值附加至環境變數。

  • 如果找到表單 [#filekey] 的子字串,則會以檔案的完整路徑取代,並將它取代為File 資料表中索引鍵的值檔案機碼。 [#filekey] 的值會維持空白,而且在安裝程式執行 CostInitialize 巨集指令FileCost 宏指令和 CostFinalize 巨集指令之前,不會由路徑取代。 [#filekey] 的值取決於檔案所屬元件的安裝狀態。 如果元件是從來源執行,此值就是檔案來源位置的路徑。 如果元件是在本機執行,此值就是安裝後檔案目標位置的路徑。 如果元件沒有動作狀態,則會使用元件的已安裝狀態來判斷 [) 。

  • 如果找到表單 [$componentkey] 的子字串,則會以元件安裝目錄取代它,並將它取代為元件資料表中索引鍵的值元件機碼。 [$componentkey] 的值會維持空白,而且在安裝程式執行 CostInitialize 巨集指令FileCost 宏指令和 CostFinalize 巨集指令之前,不會由目錄取代。 [$componentkey] 的值取決於元件的安裝狀態及其發生位置。 在 登錄資料表的 [值] 資料行中,此子字串可能會參考元件的動作狀態或要求的動作狀態。 在其他所有情況下,此子字串是指元件的動作狀態。 例如,如果元件是從來源執行,此值就是檔案的來原始目錄。 如果元件是在本機執行,則此值會在安裝之後是目標目錄。 如果元件不存在,此值會保留空白。 Windows Installer 會追蹤元件的動作和要求的安裝狀態。 例如,如果已安裝元件,它可能會有本機的要求狀態,以及 Null 的動作狀態。 如需檢查元件安裝狀態的詳細資訊,請參閱 檢查功能安裝、元件、檔案

  • 請注意,如果已安裝元件,且未在目前安裝期間重新安裝、移除或移動,則元件的動作狀態為 null,且字串 [$componentkey] 會評估為 Null。

  • 如果表單的子字串 [!找到 filekey],它會由檔案的完整簡短路徑取代,並將值 filekey 取代為 File 資料表中的索引鍵。

    只有在登錄或 IniFile 資料表的 Value 資料行中使用時,此語法才有效。 在其他資料行中使用時,此語法會被視為與 [#filekey] 相同。