[教學]只要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中文用戶手冊

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


7 則留言:

  1. 簡單易懂,感謝您的教學與分享

    回覆刪除
  2. 感謝分享,範例很容易理解,但範例程式的載點似乎掛了?

    回覆刪除
    回覆
    1. 您好,連結已經更新! http://goo.gl/wCm5Bf

      刪除
  3. 感謝你的範例,包含了基本所需要的各個功能.非常的實用
    剛好最近需要這樣的工具,真的讓我省了很多的時間
    感謝

    回覆刪除
  4. 請問您最近還有在使用NSIS嗎?
    下載最新版的3.06.1後,想照你的範例下載安裝plugin。
    但發現檔案和目錄的位置已和你的範例有所差異了。
    請問可以以AccessControl.dll這個plungin,再次教導新版的安裝嗎?
    發現新版目前好像已支援unicode. 所以當你解壓AccessConrotl後,在plugins目錄下及unicode\plugins目錄各有一支AccessControl.dll。在C:\Program Files (x86)\NSIS\Plugins目錄也有x86-ansi及x86-unicode 這2個目錄,感覺是否要前述2隻AccessControl.dll 複製到對應目錄中?另解壓後的檔案中,完全找不到任何*.nsh。
    想請您再次指導新版如何安裝plugin。
    感謝

    回覆刪除
  5. 不好意思,問了很多人,都沒法解決,想說請教你一下

    大易輸入法安裝EXE的修改問題(有Source code),用NSIS的程式,路徑修改好了,但不知如何變成EXE

    圖文如下:
    https://www.mobile01.com/topicdetail.php?f=512&t=6525776

    回覆刪除
  6. NSIS 在 2016 推了 3.0 版就原生支援 Unicode 了,因此現在可以直接使用原版囉。畢竟文中提到的 Unicode NSIS 在 2009 就沒有再更新了。

    另外是中文說明的版本停在 2005 ,不知道在使用上會有什麼不相容的地方可能也要注意。

    回覆刪除

歡迎一起討論與分享,我會馬上回覆唷!
Welcome to leave your message or sharing ! I'll reply asap.Thanks.