nsis 學習筆記 (三)
學習 NSIS 最重要的是了解 .nsi 檔案的內容,Script 中有幾個重要觀念如下:
!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 的功能。
- 安裝程式屬性 (Installer Attributes)這是用來設定安裝程式的行為,例如安裝路徑、名稱、圖示、版本資訊等,屬於全域的設定。
詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.8 - 頁面 (Pages)可以將安裝程式顯示的每個視窗當作一個頁面,NSIS 內建數個頁面類型,例如版權頁面用來顯示版權資訊,元件頁面讓用戶選擇安裝元件等。頁面之間是有先後順序的,在撰寫 Script 要特別注意,頁面主要是利用 Page 和 UninstPage 兩個指令進行設定。
詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.5
- 章節 (Sections)可以把 NSIS 的章節當作程式元件來看,例如一個安裝程式需要安裝兩個軟體,這時候就需要兩個章節,在元件頁面的視窗就會看到兩個軟體元件。比較注意的是每個章節會有一個名稱作為元件名稱,如果是 Uninstall 或字首為un.的名稱則是用在移除的元件。
詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.6 - 指令 (Instructions)指令占了 NSIS 說明的大部分,包含檔案操作、登錄檔 (Registry) 操作、程式或系統的呼叫執行等等,基本上都是安裝或移除會用到的操作指令。
詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.9 - 函式 (Functions)將常用的操作定義成函式以避免重複,特別的是 NSIS 定義一些回呼函式,我們可以撰寫一些操作讓 NSIS 執行時呼叫,例如啟動或關閉 NSIS 時執行某些工作。
詳細參閱http://nsis.sourceforge.net/Docs/Chapter4.html#4.7 - 編譯時期命令 (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 的功能。
留言
張貼留言