共用方式為


格式化

格式化數據類型是一個文字字串,會處理以解析內嵌屬性名稱、數據表索引鍵、環境變數參考和其他特殊子字串。 可辨識下列慣例來解析字串:

  • 沒有相符配對的方括弧 ([ ]) 或大括弧 ({ }) 會留在文字中。

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

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

     

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

  • 如果找到 [%environmentvariable] 格式的子字串,則環境變數的值會取代子字串。

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

  • 如果子字串以大括號 ({ }) 括住,而且不包含以方括弧 ([ ]] 括住的屬性名稱,則子字串會保持不變,包括大括號。

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

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

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

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

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

  • 如果找到表單 [!filekey] 的子字串,則會以檔案的完整簡短路徑取代它,filekey 的值 做為 File 數據表中的索引鍵

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