nsis 學習筆記 (三)

學習 NSIS 最重要的是了解 .nsi 檔案的內容,Script 中有幾個重要觀念如下:

  1. 安裝程式屬性 (Installer Attributes)這是用來設定安裝程式的行為,例如安裝路徑、名稱、圖示、版本資訊等,屬於全域的設定。
    詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.8
  2. 頁面 (Pages)可以將安裝程式顯示的每個視窗當作一個頁面,NSIS 內建數個頁面類型,例如版權頁面用來顯示版權資訊,元件頁面讓用戶選擇安裝元件等。頁面之間是有先後順序的,在撰寫 Script 要特別注意,頁面主要是利用 Page 和 UninstPage 兩個指令進行設定。
    詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.5
     
  3. 章節 (Sections)可以把 NSIS 的章節當作程式元件來看,例如一個安裝程式需要安裝兩個軟體,這時候就需要兩個章節,在元件頁面的視窗就會看到兩個軟體元件。比較注意的是每個章節會有一個名稱作為元件名稱,如果是 Uninstall 或字首為un.的名稱則是用在移除的元件。
    詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.6
  4. 指令 (Instructions)指令占了 NSIS 說明的大部分,包含檔案操作、登錄檔 (Registry) 操作、程式或系統的呼叫執行等等,基本上都是安裝或移除會用到的操作指令。
    詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.9
  5. 函式 (Functions)將常用的操作定義成函式以避免重複,特別的是 NSIS 定義一些回呼函式,我們可以撰寫一些操作讓 NSIS 執行時呼叫,例如啟動或關閉 NSIS 時執行某些工作。
    詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.7
  6. 編譯時期命令 (Compile Time Commands)這是用來設定 NSIS 編譯的行為,常用的命令有引用外掛 (plug-in) 程式、定義常數等。
    詳細參閱http://nsis.sourceforge.net/Docs/Chapter5.html
接下來我們就先寫一個安裝過程的畫面範例:
!include "WinMessages.nsh"   #  引入WinMessages.nsh 檔
!include "MUI2.nsh"                #   引入 MUI2.nsh 檔
!include "nsDialogs.nsh"         #   引入 nsDialogs.nsh檔

OutFile "test.exe"  # 輸出 "test.exe"檔

Section                 # 區段開始
SectionEnd           # 區段結束

Var dialog             # 自訂 dialog 變數
Var hwnd              # 自訂 hwnd 變數
Var null                 # 自訂 null 變數

!define /math PBM_SETRANGE32 ${WM_USER} + 6


Page Custom page.custom # 自定用戶頁面
Function page.custom        # 自定用戶頁面函數
    nsDialogs::Create 1018
    Pop $dialog                    # 跳出 dialog 變數

    ${NSD_CreateProgressBar} 0 0 100% 10% "Test" # 新增progress bar
        Pop $hwnd

     ${NSD_CreateTimer} NSD_Timer.Callback 10 # 新增 Timer

    nsDialogs::Show # 顯示 Dialogs
FunctionEnd  # 結束函數

Function NSD_Timer.Callback
    ${NSD_KillTimer} NSD_Timer.Callback
    SendMessage $hwnd ${PBM_SETRANGE32} 0 100

    SendMessage $hwnd ${PBM_SETPOS} 25 0
    Sleep 2000
    SendMessage $hwnd ${PBM_SETPOS} 50 0
    Sleep 2000
    SendMessage $hwnd ${PBM_SETPOS} 75 0
    Sleep 2000
    SendMessage $hwnd ${PBM_SETPOS} 100 0
FunctionEnd

!insertmacro MUI_LANGUAGE "English" # 語系為英文


另存 barcontrol.nsh 後編譯執行就是安裝進度的 bar 的功能。

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json