像7z和winRAR這樣的壓縮工具都支持製做自解壓的文件。所謂自解壓的文件就是不須要目標機器上安裝解壓工具,經過運行壓縮包本身便可解壓出壓縮包中的文件。下面咱們就介紹一下如何利用7z的自解壓功能製做應用程序安裝包。windows
熟悉應用程序安裝的朋友應該清楚,安裝一個應用程序真的是可簡單,簡單到很簡單,也能夠複雜,複雜到很複雜很複雜。簡單的諸如把幾個文件放在一塊兒打個壓縮包,解壓到目標機器就好了。複雜些的諸如vistual studio和office的安裝,要安裝這些工具對windows來講可謂是」傷筋動骨」,不只要給windows打補丁還要安裝各類輔助工具,各類程序組件,而且還要支持卸載,出了問題還要支持修復…app
搞定簡單的安裝程序7z天然不在話下,畢竟是老本行嘛。但7z真能搞定那麼複雜的安裝程序嗎?說7z本身能搞定確實太誇張了,但結合msi安裝包,7z確實可以勝任複雜程序的安裝。在製做安裝包前咱們先了解下7z的自解壓功能。工具
經過UI操做能夠很輕鬆的製做一個自解壓的文件。惟一要作的就是在點擊」肯定」按鈕前選擇」建立自釋放程序」選項。spa
選擇後你會發現文件的後綴名直接變成 exe了。點擊肯定便可生成自解壓文件。而後運行一下生成的test.exe文件,會提示你選擇解壓縮的目錄。命令行
下面咱們看看怎麼經過命令行的方式生成自解壓文件。日誌
7z.exe a test.exe –sfx testdir
OK,有了上面的基礎後咱們就能夠動手製做安裝包了。下面就經過兩個例子分別介紹簡單安裝包和複雜安裝包的製做過程。code
所謂的簡易安裝包是指,在運行安裝程序時把安裝包中的可執行文件解壓到某個目錄,而後運行已解壓的應用程序。blog
咱們先寫一個簡單的demo程序TestApp.exe, 它有一個配置文件TestApp.exe.config。ip
而後須要下載7zs.sfx文件。7zs.sfx文件是7z爲製做自解壓的安裝程序提供的一個文件。9.20的7zs.sfx文件在7-Zip extra包中,以後的版本都把這個文件放在了LZMA包中,而且更名爲7zs2.sfx。cmd
首先使用7z把要安裝的文打包:
7z a demo.7z TestApp.exe TestApp.exe.config
接着建立配置文件config.txt,內容以下:
;!@Install@!UTF-8! Title="Demo app" ExecuteFile="TestApp.exe" ;!@InstallEnd@!
最後執行下面的命令生成自解壓的demoapp.exe程序:
copy /b 7zS.sfx + config.txt + demo.7z demoapp.exe
好了,運行demoapp.exe試試,TestApp.exe直接運行起來了。
當咱們的程序不止一個文件時,使用這種方式用戶無需執行安裝過程,且看不到一堆亂七八糟的文件,使用體驗比較好。
前面咱們提到,7z自身是沒法完成複雜安裝包製做的。可是msi安裝包能夠,msi安裝包是windows平臺上默認的安裝程序的方式,多複雜的安裝方式都能搞定。咱們能夠先生成一個msi安裝包,而後像前面執行exe同樣執行msi安裝包。
有同窗可能要跳起來了,既然執行msi安裝包就能夠完成安裝任務,幹嗎還要脫了褲子…,畫蛇添足呢?這裏面天然是有不少難言之隱的,好比運行msi的體驗很差,要想把安裝日誌保存到文件中須要在命令行運行 msiexec.exe /i xxx.msi /log abc.log。要想以管理員權限啓動msi也是作不到的,你只能先以管理員身份啓動cmd,而後運行msiexec.exe /i xxx.msi… 使用7z則能夠輕鬆搞定這些問題。
準備一個應用程序的msi安裝包。和前面一個,咱們也須要7zs.sfx文件。
首先把msi文件打包到7z壓縮包中:
7z a testmsi.7z myapp.msi
建立配置文件config.txt,內容以下:
;!@Install@!UTF-8! Title="Demo msi" BeginPrompt="Do you want to install the xxx?" ExecuteFile="myapp.msi" ;!@InstallEnd@!
最後執行下面的命令:
copy /b 7zS.sfx + config.txt + demo.7z demoapp2.exe
運行demoapp2.exe,首先會確認是否安裝:
點擊」yes」繼續:
此時已經進入msi的安裝過程當中,根據提示進行配置便可。
前面咱們提到,要以管理員權限運行msi安裝包是不太方便的,但包裝成exe後就方便多了。
另外是爲msi安裝包傳遞參數。這裏有兩個問題,第一仍是不方便。第二,讓用戶去指定安裝參數是不太人道的!
咱們能夠經過下面的配置文件解決參數傳遞的問題:
;!@Install@!UTF-8! Title="Demo msi" BeginPrompt="Do you want to install the xxx?" ExecuteFile="msiexec.exe" ExecuteParameters="/i myapp.msi /log c:\abc.log" ;!@InstallEnd@!
好了,這下咱們能夠輕鬆拿到安裝日誌了。
對於最終用戶來講msi是一種不常見的、專業的文件類型,包裝成exe對用戶來講也更友好。
到目前爲止咱們只作的安裝包都是這個樣子的:
這可沒有一點專業的感受呀!至少應該有個Icon吧!
咱們能夠去網上找一個叫ResourceHacker的工具,用它能夠把默認的Icon文件替換成咱們本身的。下面的樣子看起來是否是會專業一些:
總結,使用7z建立安裝包既能夠實現簡單小巧的安裝場景又能夠解決一些複雜安裝過程當中的問題,真可謂老小咸宜!