撰寫合併模組目錄資料表
合併模組可以套用至.msi檔案,以將目錄新增至安裝,但無法取代或移除任何現有的目錄。 Directory 資料表會指定合併模組提供給目標安裝的目錄配置。 每個合併模組都需要目錄資料表。
在合併模組中撰寫目錄資料表時,請使用下列指導方針。 如需詳細資訊,請參閱 目錄資料表 和使用 目錄資料表。
合併模組新增的目錄結構必須有單一根目錄。 根目錄必須命名為 TARGETDIR。 使用者可以在合併期間變更 TARGETDIR 的值,以指定將模組的目錄結構附加至目標目錄樹狀結構的位置。
Directory 資料表以外的合併模組資料表不得直接參考 TARGETDIR 的目錄位置。 如果使用者變更 TARGETDIR 的值,這類參考的位置就會變更。
合併模組中的資料表必須參考 TARGETDIR 子目錄的位置,或合併模組樹狀結構中的其他目錄。 請執行下列動作,以將 TARGETDIR 指定為合併模組中目錄的父系。 在 [目錄] 資料行中輸入目錄,然後在 [Directory_Parent] 資料行中輸入 TARGETDIR。 使用 DefaultDir 資料行中的 「.」 標記法,表示此目錄位於沒有子目錄的 TARGETDIR 中。 如需詳細資訊,請參閱 使用目錄資料表。
合併模組新增的目錄名稱必須使用合併 模組資料庫中命名主鍵中所述的命名慣例。 這包括依屬性預先定義的目錄,例如 SystemFolder 屬性和 ProgramFilesFolder 屬性。
除了 TARGETDIR.) 以外,將 GUID 附加至 Directory 資料表 (中的每個專案。這包括指定 Windows Installer SystemFolder 屬性的 Directory 資料表專案,例如SystemFolder.00000000_0000_0000_0000_000000000000。 程式庫Mergemod.dll新增自訂動作來設定 SystemFolder 屬性。
合併模組中包含預先定義的目錄時,合併工具會自動將 自訂動作類型 51 新增至目標資料庫。 合併模組作者必須確保也包含 CustomAction 資料表 。 CustomAction 資料表可能是空的,但此資料表必須存在於目標資料庫中,並確保修改過的預先定義目錄會寫入正確的位置。 例如,當合併模組中包含系統目錄時,合併模組作者必須確定自訂動作資料表存在。
請注意,產生這些類型 51 自訂動作的比對演算法只會檢查目錄名稱是否以其中一個預先定義的 SystemFolder 屬性開頭。 它不會驗證目錄名稱與目錄屬性完全相等。 任何以這些標準資料夾名稱開頭的目錄都會取得類型 51 自訂動作,即使其餘的名稱不是 GUID 也一樣。 作者必須小心,這不會產生誤判相符專案,以及產生非預期的自訂動作,而衍生主鍵的開頭為其中一個 SystemFolder 屬性。
以下是合併模組中的 Directory 資料表範例,以及預期的已解析目錄。
Directory | Directory_Parent | DefaultDir |
---|---|---|
TARGETDIR | SourceDir | |
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | TARGETDIR | .:MMM_Prog |
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | TARGETDIR | MMM_Sys |
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | Dir00.BC82E350_ C7FC_11d1_ A848_006097ABDE17 | MFC_OCX |
具有上述 Directory 資料表的合併模組預期會產生下列目錄結構。
Directory | 目標 | 來源 |
---|---|---|
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [合併模組的安裝點]\ | [合併模組的來源點]\MMM_Prog |
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [SystemFolder]\ | [合併模組的來源點]\MMM_Sys |
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [合併模組的安裝點]\MFC_OCX | [合併模組的來源點]\MMM_Prog\MFC_OCX |