2011年9月5日 星期一

把exe與需要用到的DLL包成一個執行檔

最近為了使用Qt寫一些小工具,在研究如何把需要用到的library(DLL)在build time的時候就包進執行檔中~
把過程寫到如何build出不需要另外建置環境的QT exe檔
果然最後,還是沒有成功~~
目前release暫時的方法就是把需要用到的DLL檔跟執行檔放在一起@@,這樣就算使用者沒有Qt的環境,也是可以執行成功的。

現在找到另一個替代方案,就是如何把已經build出來的exe與其會用到的DLL甚至其它檔案包在一個exe檔案中,並且當使用者直接點兩下,可以執行我們的應用程式~~

目前找到winrar與7z(需另外安裝7z-sfx),與另一個好用的小tool 7-Zip SFX Maker(底層應該也是用7z-sfx完成的)
另外EXE Bundle - The EXE Binder,沒有試過

winrar:
1. 嘗試把要包在一起的檔案壓縮,並設定「建立自我解壓縮檔」

2. 到「進階設定」→「自解檔選項」
一般設定→解壓縮路徑→建立於現用的資料夾
一般設定→安裝程式→解壓縮之後執行→Calc.exe
模式→暫存模式→解幫裝至暫存資料夾
模式→安靜模式→全部隱藏

就會產生一個Winrar.exe的檔案,然後,直接執行它就可以了!!

7z-sfx (手動):
1. 先到7z網站下載SFX模組

2. 在製作自動解壓縮檔,只需要用到7zr.exe 與 7zSD.sfx這兩個檔案。
如何使用sfx,在Install資料夾裡面有範例~
3. 先把要包的檔案壓成7z

4. 編譯config.txt
這是設定 SFX for installers 在執行的時候的行為,包括解壓縮時要顯示什麼標題(Title)、是否要提示使用者按下確認後進行解壓縮(BeginPrompt)、或解壓縮後要自動執行哪支程式(RunProgram)、...等等。
;!@Install@!UTF-8!
Title="Simple Calc"
BeginPrompt="Do you want to run calc?"
RunProgram="Calc.exe"
;!@InstallEnd@!

詳細使用sfx的方式可以參考7z commmand的help裡面有說明~~



5. 把7zSD.sfx、config.txt、以及 Release.7z合併成執行檔,必需要透過windows內建的copy /b來完成~
copy /b 7zS.sfx+config.txt+Release.7z Release.exe
就會產生一個Release.exe的檔案,然後,直接執行它就可以了!!

7zip 進階自解壓縮檔產生工具 (自動):

7-ZIP SFX Maker (自動):

[2011.10.09 補充]
制作安裝檔
軟體王 - Inno Setup
Inno Setup

參考資料:
[問題]請問能將EXE和DLL包在一起成為一個可執行檔嗎?
如何利用 7-zip 設定自動解壓縮並解壓縮後自動啟動程式
7z-sfx 把7z檔案 製作成自解壓縮
製作屬於自己的WinRAR自解檔
7zSfxTool3.6.1.200(7z自解壓縮設定工具) 繁體中文

沒有留言: