http://forum.slime.com.tw/thread180995.html
安裝程序 Repack 攻略 之 MSI 篇
本文主要討論使用微軟的開發工具 orca 和 msidb 進行 MSI 安裝包的修改封裝.
下面是我對 MSI 的基本情況的認識,如果只想瞭解怎麼進行 Repack,也可以跳過這一部分。
MSI 概述
MSI 最基本的部分是對安裝程序的一個描述,包含了一個所謂安裝訊息資料庫,涉及到安裝界面、所使用的文件、建立捷逕、INI文件、註冊表、以及版本控制和反安裝訊息等。
對於安裝時所使用到的文件,MSI 可以有 3 種方式來處理:
文件隨同安裝程序以原生態發佈
文件壓縮成 Data.cab 的形式隨安裝程序發佈
文件壓縮成 .cab 文件後注入到 .msi 文件中
顯而易見,一般安裝程序很少以第一種方式發佈,而第二種和第三種比較一般。
對於注入到 .msi 文件中的情況,需要首先用 orca 找出 Media 的描述值,然後用 msidb 將 .cab 從 .msi 中抽取出來,如果直接以 Data.cab 形式發佈就可以省去這一步操作。
如果要增加移除或是取代 .cab 中的文件,需要先用 orca 找出文件對應的描述值(可能就是檔案名本身或是一串HEX編碼抑或兩者的結合),然後將 .cab 文件解包,按照描述值的檔案名來操作文件後再用 cabarc 重新打包回去。
如果 .cab 是從 .msi 抽取的,再用 msidb 重新編入。
顯而易見,一般安裝程序很少以第一種方式發佈,而第二種和第三種比較一般。
對於注入到 .msi 文件中的情況,需要首先用 orca 找出 Media 的描述值,然後用 msidb 將 .cab 從 .msi 中抽取出來,如果直接以 Data.cab 形式發佈就可以省去這一步操作。
如果要增加移除或是取代 .cab 中的文件,需要先用 orca 找出文件對應的描述值(可能就是檔案名本身或是一串HEX編碼抑或兩者的結合),然後將 .cab 文件解包,按照描述值的檔案名來操作文件後再用 cabarc 重新打包回去。
如果 .cab 是從 .msi 抽取的,再用 msidb 重新編入。
本文以修改 RemotelyAnywhere.msi 為例進行操作說明,目標是用 RemotelyAnywhere 修正檔取代安裝包中的原文件,同時將購買的許可傳輸協定整合在安裝包內,達到安裝完畢後直接可以使用的效果:
1. 使用 orca 開啟 RemotelyAnywhere.msi ,選項 TOOLS 表單的 OPTIONS 指令,切換到 DATABASE 面板,勾
選「Generate a unique Package Code each time a database is saved」,然後執行 File 表單的 Save as 指令,把 RemotelyAnywhere.msi 文件另存為 ra.msi 文件。
2. 使用 orca 開啟 ra.msi ,在左側 Tables 中選項 Media ,在右側 Cabinet 列可以看到壓縮包名稱為 #data.cab ,記下,關閉 orca。
3. 使用 msidb 從 ra.msi 中抽取 data.cab:
代碼:
msidb.exe -x data.cab -d ra.msi
4. 將 data.cab 中的文件展開:
代碼:
·建立 files 目錄
md files
·展開文件到 files
expand data.cab -F:* files
·移除 data.cab
5. 將修正檔文件 RemotelyAnywhere.exe 複製到 files 目錄中覆蓋原文件。
6. 將文件重新打包成 data.cab :
代碼:
cabarc.exe -m LZX:21 -r N data.cab "files\*"
7. 將 data.cab 編入 ra.msi 中:
代碼:
msidb.exe -a data.cab -d ra.msi
8. 使用 orca 開啟 ra.msi ,在左側 Tables 中選項 Registry ,在右側工作區點右鍵,選項 Add Row,按以下內容輸入各列:
代碼:
[Registry] REGISTRY_LICENSE
[Root] 2
[Key] Software\RemotelyAnywhere\V5
[Name] License
[檔案類型] -----BEGIN LICENSE-----
PRODUCT RemotelyAnywhere...
[Component] Service_Files
這裡是自己的編撰了一個註冊表項用於安裝時自動輸入許可文件,檔案類型 欄的內容就按你購買的 License 的內容輸入即可。
9. 使用 orca 儲存完成後的 MSI,收工。
PS: 本文中因為只涉及取代文件,所以沒提及增減文件的操作,如果有需要這方面的操作,首先應在操作 cab 包時增減文件,並用 orca 開啟
msi
文件對以下資料表項進行調整:FeatureComponents、File,具體操作在此不贅述,遇到具體案例時可以聯繫我,到時根據實戰再修改此貼。
TIPS: 如果安裝程序是由 Setup.exe Data1.cab 等一系列文件組成的,你還可以使用 InstallShield 的
Pakage For The Web 來將其打包成單個文件,同樣,如果原始安裝程序是 InstallShield
製作的單個文件,不妨試一試用右鍵開啟,WinRAR 可以將其解壓還原出多個文件。
文中提及的工具:
CabArc
msidb
orca
資源列表共