簡單流程如下:
1. 利用7-Zip將程式打包,產生.7z檔
2. 利用7z_extra裡面附屬的7zS.sfx或是7zSD.sfx設定檔產生自解並自動執行檔
相關工具
1. 當然是7-Zip自己啦
7-Zip 公式網站
http://www.7-zip.org/
SourceForge上的7-Zip檔案庫:
http://sourceforge.net/projects/sevenzip/files/7-Zip/
最新的9.22版的連結:
2. 7z_extra.7z追加套裝
7z_extra這個重要的套裝是沒有附在基本檔裡的,需要自己去下載來裝
不過在上面的SourceForge檔案庫裡有公開
以9.22版來說,這個追加檔案是7z922_extra.7z
http://sourceforge.net/projects/sevenzip/files/7-Zip/9.22/7z922_extra.7z/download
步驟1: 利用7-Zip將程式打包
建議使用無壓縮選項,以後再來壓縮就好= =
假如我們有檔案目錄ABC, 要把他打包的命令列指令就如下面所示
7z a ABC.7z ABC\*
步驟2.1準備設定檔
我們需要一個設定檔config.txt來告訴7z我們要怎麼
config.txt必須是無BOM的UTF-8編碼
以「;!@Install@!UTF-8!」行開始,以「;!@InstallEnd@!」行結束。
ID_String 設定關鍵字串 |
Description 說明 |
---|---|
Title | 解壓縮時顯示訊息的標題 |
BeginPrompt | 開始前詢問的字串 |
Progress | 顯示解壓縮進度。可以設定為yes或是no。預設是yes |
RunProgram | 解壓縮後執行的指令。 預設值是"setup.exe"。子字串 %%T 將會被替代為解壓縮時臨時資料夾的路徑。 |
Directory | RunProgram的資料夾前綴。預設值是".\\"。如果你的壓縮檔裡面又放了層資料夾,你就可以把資料夾名稱設定在此,那執行程式就會順利找到setup.exe檔 |
ExecuteFile | 執行檔名 |
ExecuteParameters | ExecuteFile的執行參數 |
以上指令並非全部必要。甚至你可以省略config.txt設定檔本身。
有兩種方式可以指定安裝程式:RunProgram或是ExecuteFile
用RunProgram來執行7z壓縮檔裡面的程式
用ExecuteFile來開啟7z壓縮檔裡面的文件檔或是呼叫外部程式來開啟7z壓縮檔裡面的檔案(例如.msi檔之類的)
以下是幾種config.txt的設定例:
;!@Install@!UTF-8! Title="7-Zip 4.00" BeginPrompt="Do you want to install the 7-Zip 4.00?" RunProgram="setup.exe" ;!@InstallEnd@!
;!@Install@!UTF-8! Title="7-Zip 4.00" BeginPrompt="Do you want to install the 7-Zip 4.00?" ExecuteFile="7zip.msi" ;!@InstallEnd@!
;!@Install@!UTF-8! Title="7-Zip 4.01 Update" BeginPrompt="Do you want to install the 7-Zip 4.01 Update?" ExecuteFile="msiexec.exe" ExecuteParameters="/i 7zip.msi REINSTALL=ALL REINSTALLMODE=vomus" ;!@InstallEnd@!
步驟3,把7z壓縮檔跟自解設定檔放在一起產生執行檔
我們剛剛說了需要7z_extra套件的理由來了
打開套件包,把裡面的7zS.sfx或是7zSD.sfx抓出來,把他放在跟7z壓縮檔同一個目錄中
7zS.sfx跟7zSD.sfx的差別是,一個使用靜態的程式庫連結,一個使用windows的MSVCRT.dll動態程式庫連結。
在命令列打下面的複製指令,把7zS.sfx, config.txt, ABC.7z套成一個ABC.exe自解檔
copy /b 7zS.sfx + config.txt + ABC.7z ABC.exe
大功告成!!
追加步驟:
如果你覺得無壓縮太大了不能承受,在製造7z檔的時候壓縮率加大一點,當然相對的解壓縮的時候會浪費比較多cpu資源跟記憶體。
如果檔案已經壓好了,可以用UPX之類的工具把他在壓過...當然,那又是另一段故事了...
0 件のコメント:
コメントを投稿