Windows Installer XML 概述 (3)

Structure of the .wixobj file

編譯程序爲每個源文件生成相應的.wixobj文件, .wixobj文件是XML格式的文檔,遵照WiX項目中objects.xsd schema的定義。.wixobj文件包含一個或多個節,每個節包含標記號和指向其他標記號的引用。

雖然標記號和引用是.wixobj文件中最重要的數據,但他們只是信息中很少的一部分。大多數.wixobj文件的主要內由<table/>, <row/> and <field/>組成,這些元素提供了Windows Installer安裝包的原始數據。許多情況下,鏈接程序不但處理標記號和引用,還要使用和更新.wixobj中的原始數據。

但有趣的是,.wixobj文件schema (objects.xsd)使用了camel外殼,而源文件schema (wix.xsd)使用了Pascal外殼。 這種選擇明確表示.wixobj文件不能被用戶編輯。事實上,對於只能用Wix工具包處理的數據,用來定義這些數據的schema都使用了camel外殼。

candle - Windows Installer XML Compiler

candle.exe是Windows Installer XM的編譯程序,candle.exe的任務是將作爲輸入的.wxs源文件預處理生成有效的符合WiX schema( wix.xsd )的XML文檔。然後,每一個經後處理的源文件被編譯成.wixobj文件。

編輯過程是比較簡單的。WiX schema遵從簡單的遞歸降序解析。編譯程序處理每個單元,依次爲.wixobj文件創建新新的標記號,計算必要的引用和生成原始數據。

第二版candle.exe與第一版基本相同。僅有的變更包括:使新的標記號和引用可以鏈接以及基於客戶反饋的改變。兩個版本不同的地方包括:新的.wixobj文件的格式由MSI改爲XML格式,主鍵的創建放在了鏈接時間,二進制文件的導入放在了鏈接時間。

light - Windows Installer XML Linker

light.exe是Windows Installer XM的鏈接程序。light的任務是處理一個或多個.wixobj文件,從多個外部文件中提取元數據,創建Windows Installer安裝包(MSI or MSM)。必要時,light還將創建.cab文件和嵌入到Windows Installer安裝包的數據流。

鏈接程序開始搜索從命令行輸入的.wixobj文件以找到入口節。若發現一個以上的入口節,light返回錯誤。錯誤返回是必要的,因爲入口節定義了準備創建什麼類型的Windows Installer安裝包,MSI (<Product/>) 或者 MSM (<Module/>)。 不可能從一個鏈接操作創建出兩個安裝包。

當鏈接程序確定入口節時,將定義在每個.wixobj文件中的標記號儲存在標記號表中。當找到入口節後,鏈接程序通過尋找標記號表中的所有標記號試圖處理該節中的所有引用。當發現標記號在不同的節中,鏈接程序遞歸連處理新節中的標記號。這個過程要搜索必要的節以解決引用的全部嵌套,直到所有的引用都滿足爲止。如果一個標記號在所有提供的.wixobj文件都沒有找到,鏈接程序退出處理,並返回一個錯誤表示未定義的標記號。

所有的節找到之後,將處理複雜引用和反向引用。這個過程出現在以下場合:Components 和 Merge Modules 準備掛接其上一級的 Features,或者準備添加Merge Modules, Components到ModuleComponents表中。反向引用處理是爲象Shortcut, Class, 和 TypeLib這類元素添加合適的Feature ID。

一旦所有的引用解決後,鏈接程序處理所有的行,檢索引用文件的語言、版本號和hash值,計算媒體佈局,以及包括一些必要的標準流程,以確保成功安裝順序。這部分的處理,結束前通常生成附加的行,以獲得額外的與入口節的聯繫,來確保它們被打包到最終的Windows Installer安裝包。

最後,light產生IDT文件,並將他們導入到Windows Installer安裝包。 數據庫創建完成後,最後一步是合併Merge Modules,如果需要,創建.cab文件。輸出結果是一個完整功能的Windows Installer安裝包。 

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章