MsiFormatRecordA 函式 (msiquery.h)
MsiFormatRecord 函式會使用格式字串來格式化記錄欄位資料和屬性。
語法
UINT MsiFormatRecordA(
[in] MSIHANDLE hInstall,
[in] MSIHANDLE hRecord,
[out] LPSTR szResultBuf,
[in, out] LPDWORD pcchResultBuf
);
參數
[in] hInstall
安裝句柄。 這可能會省略,在此情況下,只會處理記錄欄位參數,而且屬性無法替代。
[in] hRecord
要格式化之記錄的句柄。 範本字串必須儲存在記錄欄位 0 中,後面接著參考的數據參數。
[out] szResultBuf
接收 Null 終止格式化字串之緩衝區的指標。 請勿嘗試藉由傳入 szResultBuf的 null (value=0) 來判斷緩衝區的大小。 您可以傳入空字串來取得緩衝區的大小(例如 “” )。 然後,函式會傳回 ERROR_MORE_DATA,pcchResultBuf 包含 TCHAR s 中所需的緩衝區大小,不包括終止的 null 字元。 傳回 ERROR_SUCCESS時,pcchResultBuf 包含寫入緩衝區的 TCHAR數目,不包括終止的 Null 字元。
[in, out] pcchResultBuf
變數的指標,指定變數 TCHARs 所指向之緩衝區的大小,szResultBuf。 當函式傳回 ERROR_SUCCESS時,此變數會包含複製到 s szResultBuf 的數據大小,不包括終止的 Null 字元。 如果 szResultBuf 不夠大,函式會傳回 ERROR_MORE_DATA 並儲存必要的大小,不包括終止 null 字元,pcchResultBuf所指向的變數中。
傳回值
MsiFormatRecord 函式會傳回下列其中一個值:
言論
MsiFormatRecord 函式會使用下列格式程式。
要 格式化 的參數會以方括弧 [...]括住。因為替代是從內到外解析,所以可以進行反方括弧的查看。
如果字串的一部分以大括弧 { } 括住,而且不包含方括弧,則會保持不變,包括大括號。
如果字串的一部分以大括弧 { } 括住,並包含一或多個屬性名稱,而且如果找到所有屬性,則會顯示文字(含已解析的替代專案),而不會顯示大括號。 如果找不到任何屬性,則會移除大括弧和大括弧本身中的所有文字。
請注意,在延遲執行自定義動作的情況下,MsiFormatRecord 僅支援 CustomActionData 和 ProductCode 属性。 如需詳細資訊,請參閱 取得延遲執行自訂動作的內容資訊。
下列步驟說明如何使用 MsiFormatRecord 函式來格式化字串:
使用 MsiFormatRecord 函式格式化字串
- 以對應記錄欄位的值取代標記,取代數值參數,而遺漏或 Null 值則不產生任何文字。
-
結果字串的處理方式是將非記錄參數取代為對應的值,如下所述。
- 如果遇到窗體 “[propertyname]” 的子字串,則會由 屬性的值取代。
- 如果找到窗體[%environmentvariable]“ 的子字串,則會取代環境變數的值。
- 如果找到格式為 “ [#filekey]” 的子字串,則會將它取代為檔案的完整路徑,其值 filekey 做為 File 數據表中索引鍵的值。 “[#filekey]” 的值會維持空白,而且直到安裝程式執行 CostInitialize 巨集指令、FileCost 巨集指令,以及 CostFinalize 巨集指令為止,才會取代路徑。 “[#filekey]” 的值取決於檔案所屬元件的安裝狀態。 如果元件是從來源執行,此值就是檔案來源位置的路徑。 如果元件是在本機執行,此值就是安裝之後檔案目標位置的路徑。 如果元件不存在,則路徑為空白。 如需檢查元件安裝狀態的詳細資訊,請參閱 檢查安裝功能、元件、檔案。
- 如果找到表單 [$componentkey]“ 的子字串,則會由元件的安裝目錄取代,其值 componentkey 做為 元件數據表中的索引鍵,。 “[$componentkey]” 的值會維持空白,而且在安裝程序執行 CostInitialize 巨集指令、FileCost 巨集指令,以及 CostFinalize 巨集指令之前,不會由目錄取代。 “[$componentkey]” 的值取決於元件的安裝狀態。 如果元件是從來源執行,則值會是檔案的來源目錄。 如果元件是在本機執行,則值會在安裝之後是目標目錄。 如果元件不存在,則值會保留空白。 如需檢查元件安裝狀態的詳細資訊,請參閱 檢查安裝功能、元件、檔案。
- 請注意,如果元件已安裝,而且目前安裝期間未重新安裝、移除或移動,元件的動作狀態為 null,因此字串 “[$componentkey]” 會評估為 Null。
- 如果找到窗體 “[\c]” 的子字串,則會由字元取代,而不需要進一步處理。 只保留反斜杠之後的第一個字元;其他所有項目都會移除。
注意
msiquery.h 標頭會根據 UNICODE 預處理器常數的定義,將 MsiFormatRecord 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 |
目標平臺 | 窗戶 |
標頭 | msiquery.h |
連結庫 | Msi.lib |
DLL | Msi.dll |