[教學]只要10分鐘學會使用 NSIS 包裝您的桌面軟體–安裝程式打包。完全免費。

幫我按個讚!
最近公司有一個專案需要打包,打包軟體有不少,但礙於需要商業使用,又要免費的關係,所以選擇不多。
目前市面上常見的打包軟體有:
以下是要錢的:
InstallShield : 是部分UI介面與部分 Script,必須搭配Visual Studio Community以上版本,Community等於完整版,免費但是只能用在非商業用途。Visual Studio Express 雖然免費,但不可以使用強大的InstallShield。
Advanced Installer : 全UI介面,所以學習與測試都很快。獨立運作軟體。本魯覺得的確很容易使用。
以下是免費的:
NSIS: 使用簡單的語法來包裝成EXE執行檔。NSI檔。
Inno Setup: 如果您有學過Pascal,可以馬上使用相同語言包裝EXE執行檔。INI檔。
Wix: 稍微難一點,要學懂MSI檔架構,使用XML。
==> NSIS (NullSoft)、 Inno Setup、Wix,這些都是寫script/code,沒有什麼UI介面,Complier之後會變成一個exe檔。

Light bulb以上其實是廢話。真正的教學如下。
NSIS其實很老牌,但有一個缺點,就是他不是Unicode的,也就是您的Windows假如有因為某些關係更改了『系統地區設定』會容易造成亂碼。(例如繁體中文版的Win7,但是『系統地區設定』改成簡體中文的時候。)
image
幸好,還是有網路神人把他弄成Unicode版本,官網 : http://www.scratchpaper.com/

步驟1:安裝Unicode NSIS [或稱NSIS Unicode , NSISu]
Unicode NSIS : https://code.google.com/archive/p/unsis/downloads
這邊範例用 nsis-2.46.5-Unicode-setup.exe
image
另外NSI檔編輯軟體可使用用 Notepad++ ,Notepad++ 支援NSI檔的編輯。
步驟2 : 案需求安裝Plugin,以下列出常用的Plugin,記得要安裝支援Unicode的喔!
檔案名稱 說明
AccessControl.dll 設定目錄或檔案權限(Everyone,FullAccess) Download
KillProcDLL.dll 反安裝時,強制關閉Process用 Download
liteFirewall.dll 設定防火牆 Download
UAC.dll、UAC.nsh 可呼叫開啟UAC權限選單 Download
安裝方法:
下載回來的檔案解壓縮後,目錄下的*.dll檔,全部複製到C:\Program Files (x86)\NSIS\Unicode\Plugins ,目錄下的*.nsh檔,複製到C:\Program Files (x86)\NSIS\Unicode\Include
步驟3 :  用Notepad++開啟Exmaple.nsi檔。
Work範例檔下載: http://goo.gl/wCm5Bf  (2017.09已更新)
這是您應該要有的檔案
image
您需要注意或修改的部分:
1. 設定產品名,版本號,發布者,官網 等
image
2. 各種圖示 和 License
image
3. 如何設定,欲加入的檔案或資料夾
image
安裝過程會依照 SEC01 –> SEC02 –> SEC03 的順序安裝,每個Section可以加入很多檔案或資料夾,上圖只是分開示範。
另外Section不夠用可以自己加,如SEC04、SEC05、SEC06....依此類推。
要注意的是: 每個檔案或資料夾,必須按照順序設定 SetOutPath(該檔安裝路徑)、SetOverwrite(該檔複寫否?)、然後才可以一一加入欲加安裝的File或資料夾。


需要用到Plugin的說明:
Plugin - 1: 安裝完畢後,是否使用UAC權限開啟主程式。
    UAC.dll、UAC.nsh 可呼叫開啟UAC權限選單 Download
    image
Plugin - 2: 設定安裝目錄的權限 :
AccessControl.dll 設定目錄或檔案權限(Everyone,FullAccess) Download
image
(S-1-1-0) : Everyone
(S-1-5-32-545) : Users
可參考https://support.microsoft.com/zh-tw/kb/163846
Plugin - 3:  強制關閉正在執行的軟體
KillProcDLL.dll 反安裝時,強制關閉Process用 Download
image
Plugin - 4: 把某些程式加入防火牆信任清單,每次設定一則規則都要再加上一行 Pop $0
liteFirewall.dll 設定防火牆 Download
image

步驟4 : 開啟 NSIS Unicode ,並按下Compile NSI scripts
image
步驟5 : 開啟 Example.nsi檔,開始打包。
image
步驟6 :打包完成會show Total size,打包好的檔案在output裡
image
image
Light bulb範例檔的執行畫面:
image
image
image
image
image

Light bulb其他事項
原本的NSIS Unicode就支援各國語言,只不過某些自訂對話框需要自行輸入各國語言的文字,本範例檔只提供繁中簡中英文。
image
另外,編譯好的安裝檔,強烈建議在VMware或其他虛擬系統內測試,以保安全。
想要找更完整的語法,請到 NSIS中文用戶手冊

請來幫我按個讚喔~謝謝您~