[全部展開]   [全部折疊]

介紹

NSIS 2 能夠使你更容易地建立自定義用戶介面的安裝程式. Modern UI (新式用戶介面) 提供的介面樣式與最近版本的 Windows 所使用的嚮導的介面樣式很相似.

這種新介面也是新頁面(歡迎, 完成, 開始選單)和組件選擇頁面上的描述區域的一個新特色. 這些介面和圖形都可以通過提供的設定自定義.

通過使用 Modern UI 的宏和語言檔案, 使得編寫一個新式介面的腳本變得很輕鬆. 這個文件包含了關於編寫 Modern UI 腳本的訊息以及所有設定的參考訊息.

重要提示: 因為 Modern UI 擁有它自己的宏系統, 它自己的預設設定和許多新功能, 該介面的配置已與以往大不相同. 所以你不應再使用像 LicenseText, Icon, CheckBitmap, InstallColors 等這樣的命令了.

Open/Close section 螢幕截圖

如何使用

Modern UI 有一個宏系統, 因此所有用於控制介面的代碼已經為你寫好了.

如果你想新建一個 Modern UI 腳本, 或是升級用於 Classic UI 的舊腳本, 那麼請按以下步驟進行.

先看看 範例 腳本將會令你能夠更多地瞭解 Modern UI.

語法

某些定義 (例如 MUI_COMPONENTSPAGE_SMALLDESC) 不需要值, 他們只有 true/false 之分. 而另一些 (例如 MUI_UI) 則需要定義一個指定的值.

參數需要指定為這樣的格式: 必須項 (選項1 | 選項2) [可選項]

被定義的參數設定應當在一個字元串中:

!define MUI_COMPONENTSPAGE_SMALLDESC ;無值
!define MUI_UI "myUI.exe" ;值
!define MUI_INSTFILESPAGE_COLORS "FFFFFF 000000" ;多個設定

如果你希望某些值使用指定的語言, 你需要設定一個語言字元串 (使用 LangString), 並將 $(字元串名) 定義為值. 對於許可文字則使用一個許可語言字元串 (LicenseLangString).

如果你想向一個 Modern UI 字元串中新增 ", 那麼你應當用 $\" 作為替代, 因為 Modern UI 宏需要用 " 分隔參數.

1. 頭檔案

!include "MUI.nsh"

MUI.nsh 在 "Include" 目錄中, 因此你不需為其指定路徑.

2. 介面配置

應當在插入 "頁面宏" 之前設定 "介面設定". 頁面的介面設定將會應用於某一類型的所有頁面.

Open/Close section 介面設定

Open/Close section 慣用介面設定

MUI_ICON icon_file
安裝程式的圖檔.
預設: ${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico

MUI_UNICON icon_file
卸載程式的圖檔.
預設: ${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico

MUI_HEADERIMAGE
一張顯示於頁眉的圖檔.

MUI_HEADERIMAGE_BITMAP bmp_file
顯示於安裝程式頁眉的位圖 (推薦容量: 150x57 象素).
預設: ${NSISDIR}\Contrib\Graphics\Header\nsis.bmp

MUI_HEADERIMAGE_BITMAP_NOSTRETCH
不拉伸安裝程式的頁眉圖檔. 只有當你要使用一張不需佔用整個空白區域的圖檔時, 才使用這個選項. 如果你使用了一張匹配推薦容量的位圖, 則不需使用這個選項, 因為如果用戶使用了自定義的 DPI 設定, 那麼其置放位圖的區域容量會有所不同.

MUI_HEADERIMAGE_BITMAP_RTL bmp_file
當使用 RTL 語言時, 將會顯示於安裝程式的頁面頁眉的位圖. (推薦容量: 150x57 象素).
預設: 非 RTL 位圖

MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH
當使用 RTL 語言適應區域容量時, 不拉伸安裝程式的頁眉圖檔. 只有當你要使用一張不需佔用整個空白區域的圖檔時, 才使用這個選項. 如果你使用了一張匹配推薦容量的位圖, 則不需使用這個選項, 因為如果用戶使用了自定義的 DPI 設定, 那麼其置放位圖的區域容量會有所不同.

MUI_HEADERIMAGE_UNBITMAP bmp_file
顯示於卸載程式頁眉的位圖 (推薦容量: 150x57 象素).
預設: 安裝程式頁眉位圖

MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH
不拉伸卸載程式的頁眉圖檔. 只有當你要使用一張不需佔用整個空白區域的圖檔時, 才使用這個選項. 如果你使用了一張匹配推薦容量的位圖, 則不需使用這個選項, 因為如果用戶使用了自定義的 DPI 設定, 那麼其置放位圖的區域容量會有所不同.

MUI_HEADERIMAGE_UNBITMAP_RTL bmp_file
當使用 RTL 語言時, 將會顯示於卸載程式的頁面頁眉的位圖. (推薦容量: 150x57 象素).
預設: 安裝程式 RTL 頁眉位圖

MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH
當使用 RTL 語言適應區域容量時, 不拉伸卸載程式的頁眉圖檔. 只有當你要使用一張不需佔用整個空白區域的圖檔時, 才使用這個選項. 如果你使用了一張匹配推薦容量的位圖, 則不需使用這個選項, 因為如果用戶使用了自定義的 DPI 設定, 那麼其置放位圖的區域容量會有所不同

MUI_HEADERIMAGE_RIGHT
令本應顯示於左邊的頁眉圖檔顯示於右面(當使用 RTL 語言時, 它將會顯示於左邊而不顯示於右邊).

MUI_BGCOLOR (color: RRGGBBR hexadecimal)
頁眉, 歡迎頁面和完成頁面的背景顏色, the Welcome page and the Finish page.
預設: FFFFFF

Open/Close section 介面資源設定

MUI_UI ui_file
對話資源的介面檔案. 如果你要定制你自己的用戶介面, 請更改這裡.
預設: ${NSISDIR}\Contrib\UIs\modern.exe

MUI_UI_HEADERIMAGE ui_file
包含一個位圖控件以及置放頁眉位圖空間的對話資源 IDD_INST 的介面檔案.
預設: ${NSISDIR}\Contrib\UIs\modern-headerbmp.exe

MUI_UI_HEADERIMAGE_RIGHT ui_file
包含一個位圖控件以及在右邊置放頁眉位圖空間的對話資源 IDD_INST 的介面檔案.
預設: ${NSISDIR}\Contrib\UIs\modern-headerbmpr.exe

MUI_UI_COMPONENTSPAGE_SMALLDESC ui_file
包含有一個較小描述區域的自定義對話資源 IDD_SELCOM 的介面檔案.
預設: {NSISDIR}\Contrib\UIs\modern-smalldesc.exe

MUI_UI_COMPONENTSPAGE_NODESC ui_file
包含一個沒有描述區域的自定義對話資源 IDD_SELCOM 的介面檔案.
預設: {NSISDIR}\Contrib\UIs\modern-nodesc.exe

Open/Close section 歡迎/完成頁面 介面設定

MUI_WELCOMEFINISHPAGE_BITMAP bmp_file
用於歡迎頁面和完成頁面的位圖. (推薦容量: 164x314 象素).
預設: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
不拉伸用於歡迎頁面和完成頁面的位圖. 只有當你要使用一張不需佔用整個空白區域的圖檔時, 才使用這個選項. 如果你使用了一張匹配推薦容量的位圖, 則不需使用這個選項, 因為如果用戶使用了自定義的 DPI 設定, 那麼其置放位圖的區域容量會有所不同.

Open/Close section 歡迎/完成頁面 InstallOptions INI 設定

MUI_WELCOMEFINISHPAGE_INI ini_file
用於歡迎頁面和完成頁面的 InstallOptions INI 檔案.
預設: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini

Open/Close section 卸載程式的歡迎/完成頁面設定

MUI_UNWELCOMEFINISHPAGE_BITMAP bmp_file
用於歡迎頁面和完成頁面的位圖. (推薦容量: 164x314 象素).
預設: ${NSISDIR}\Contrib\Graphics\Wizard\win.bmp

MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
不拉伸用於歡迎頁面和完成頁面的位圖. 只有當你要使用一張不需佔用整個空白區域的圖檔時, 才使用這個選項. 如果你使用了一張匹配推薦容量的位圖, 則不需使用這個選項, 因為如果用戶使用了自定義的 DPI 設定, 那麼其置放位圖的區域容量會有所不同.

Open/Close section 卸載程式的歡迎/完成頁面的介面 INI 設定

MUI_UNWELCOMEFINISHPAGE_INI ini_file
用於卸載程式的歡迎頁面和完成頁面的 InstallOptions INI 檔案.
預設: ${NSISDIR}\Contrib\Modern UI\ioSpecial.ini

Open/Close section 許可頁面介面設定

MUI_LICENSEPAGE_BGCOLOR (/windows | /grey | (color: RRGGBB hexadecimal))
許可文字框的背景顏色. /windows 用於 Windows 的文字背景顏色 (通常為白色). /grey 用於 Window 的背景顏色 (通常為灰色).
預設: /windows

Open/Close section 組件頁面介面設定

MUI_COMPONENTSPAGE_CHECKBITMAP bitmap_file
用於組件樹形視圖的構選框的位圖.
預設: ${NSISDIR}\Contrib\Graphics\Checks\modern.bmp

MUI_COMPONENTSPAGE_SMALLDESC
較小的頁面底部的描述區域. 如果你有許多區段且不需較多的描述, 請使用這個選項.

MUI_COMPONENTSPAGE_NODESC
不需描述區域.

Open/Close section 安裝頁面介面設定

MUI_INSTFILESPAGE_COLORS (/windows | (foreground color: RRGGBB hexadecimal) (background color: RRGGBB hexadecimal))
詳細訊息顯示屏的顏色. /windows 用於預設的 Windows 顏色.
預設: /windows

MUI_INSTFILESPAGE_PROGRESSBAR ("" | colored | smooth)
進度條的樣式. Colored 能令它使用 MUI_INSTALLCOLORS.
預設: smooth

Open/Close section 安裝程式完成頁面介面設定

MUI_FINISHPAGE_NOAUTOCLOSE
不自動跳到完成頁面, 允許用戶檢查安裝記錄.

Open/Close section 卸載程式完成頁面介面設定

MUI_UNFINISHPAGE_NOAUTOCLOSE
不自動跳到完成頁面, 允許用戶檢查卸載記錄.

Open/Close section 結束警告設定

MUI_ABORTWARNING
當用戶要關閉安裝程式時, 顯示一個警告消息框.

MUI_ABORTWARNING_TEXT text
顯示於結束警告消息框的文字.

Open/Close section 卸載程式結束警告設定

MUI_UNABORTWARNING
當用戶要關閉卸載程式時, 顯示一個警告消息框.

MUI_UNABORTWARNING_TEXT text
顯示於結束警告消息框的文字..

3. 頁面

插入以下宏可以設定你要使用的頁面. 這些頁面將會按你在腳本中插入的順序出現. 你也可以在這些宏之間插入自定義的頁面命令以新增自定義頁面. 更多關於自定義頁面的訊息...

你可以按特定類型新增多個頁面 (例如, 如果你想讓用戶指定多個檔案夾).

範例:

!insertmacro MUI_PAGE_LICENSE "License.rtf"
!insertmacro MUI_PAGE_COMPONENTS

Var STARTMENU_FOLDER
!insertmacro MUI_PAGE_STARTMENU "應用程式" $STARTMENU_FOLDER

當你使用 "Start Menu Folder" 宏時, 你將需要 "Start Menu Folder" 頁面的頁面 ID. "Start Menu Folder" 將會被儲存於指定的變量中.

安裝程式頁面
MUI_PAGE_WELCOME
MUI_PAGE_LICENSE text/rtf_file
MUI_PAGE_COMPONENTS
MUI_PAGE_DIRECTORY
MUI_PAGE_STARTMENU page_id variable
MUI_PAGE_INSTFILES
MUI_PAGE_FINISH

卸載程式頁面
MUI_UNPAGE_WELCOME
MUI_UNPAGE_CONFIRM
MUI_UNPAGE_LICENSE text/rtf_file
MUI_UNPAGE_COMPONENTS
MUI_UNPAGE_DIRECTORY
MUI_UNPAGE_INSTFILES
MUI_UNPAGE_FINISH

Open/Close section 頁面設定

頁面設定應用於單個頁面且應在插入一個宏之前設定. 如果你有一種類型的多個頁面, 並且你想要為它們全體作同一個設定, 那麼請在每個頁面宏之前進行設定. 範例:

;新增一個讓用戶指定插件檔案夾的目錄頁面
;將此檔案夾路徑存於 $PLUGINS_FOLDER

Var PLUGINS_FOLDER
!define MUI_DIRECTORYPAGE_VARIABLE $PLUGINS_FOLDER
!insertmacro MUI_PAGE_DIRECTORY

注意: 安裝程式和卸載程式的頁面設定沒有什麼不同.

Open/Close section 慣用頁面設定

MUI_PAGE_HEADER_TEXT text
顯示於頁面頁眉的文字.

MUI_PAGE_HEADER_SUBTEXT text
顯示於頁面頁眉的旁白.

Open/Close section 歡迎頁面設定

MUI_WELCOMEPAGE_TITLE title
顯示於頁面頂部的標題.

MUI_WELCOMEPAGE_TITLE_3LINES
標題區域的額外空區.

MUI_WELCOMEPAGE_TEXT text
顯示於頁面的文字. 用 \r\n 換行.

Open/Close section 許可頁面設定

MUI_LICENSEPAGE_TEXT_TOP text
顯示於頁面頂部的文字.

MUI_LICENSEPAGE_TEXT_BOTTOM text
顯示於頁面底部的文字.

MUI_LICENSEPAGE_BUTTON button_text
顯示於 '我同意' 按鈕的文字.

MUI_LICENSEPAGE_CHECKBOX
顯示一個用於用戶選中同意許可條款的復選框.

MUI_LICENSEPAGE_CHECKBOX_TEXT text
顯示在一個用於用戶選中同意許可條款的復選框旁的文字.

MUI_LICENSEPAGE_RADIOBUTTONS
顯示兩個用於用戶是否接受許可條款的單選按鈕

MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT text
顯示在用於用戶接受許可條款的單選按鈕旁的文字.

MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE text
顯示在用於用戶拒絕許可條款的單選按鈕旁的文字.

Open/Close section 組件頁面設定

MUI_COMPONENTSPAGE_TEXT_TOP text
顯示於頁面頂部的文字.

MUI_COMPONENTSPAGE_TEXT_COMPLIST text
顯示在組件列表旁的文字.

MUI_COMPONENTSPAGE_TEXT_INSTTYPE text
顯示在安裝類型組合框旁的文字.

MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE text
顯示在描述框標題上的文字.

MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO text
當沒有選擇區段時, 顯示於描述框中的文字.

Open/Close section 目錄頁面設定

MUI_DIRECTORYPAGE_TEXT_TOP text
顯示於頁面頂部的文字.

MUI_DIRECTORYPAGE_TEXT_DESTINATION text
顯示於目標檔案夾框架的文字.

MUI_DIRECTORYPAGE_VARIABLE variable
用於存儲所選檔案夾的變量.
預設: $INSTDIR

MUI_DIRECTORYPAGE_VERIFYONLEAVE
當一個檔案夾無效時, 不禁用 "下一步" 按鈕, 但是允許你使用 GetInstDirError 函數以操作一個無效的檔案夾.

Open/Close section 開始選單檔案夾頁面設定

將這些用於建立快捷方式的代碼置於宏 (使用 CreateShortcut) MUI_STARTMENU_WRITE_BEGIN 和 MUI_STARTMENU_WRITE_END 之間:

!insertmacro MUI_STARTMENU_WRITE_BEGIN page_id
  ...建立快捷方式...
!insertmacro MUI_STARTMENU_WRITE_END

此 "Page ID" 應當是用於置放用戶所選用於建立快捷方式的檔案夾的頁面的 ID.

MUI_STARTMENUPAGE_TEXT_TOP text
顯示於頁面頂部的文字.

MUI_STARTMENUPAGE_TEXT_CHECKBOX text
顯示於 "禁止建立開始選單檔案夾" 復選框旁的文字.

MUI_STARTMENUPAGE_DEFAULTFOLDER folder
預設開始選單檔案夾.

MUI_STARTMENUPAGE_NODISABLE
不顯示 "禁止建立開始選單檔案夾" 復選框.

MUI_STARTMENUPAGE_REGISTRY_ROOT root
MUI_STARTMENUPAGE_REGISTRY_KEY key
MUI_STARTMENUPAGE_REGISTRY_VALUENAME value_name
此註冊表項用於存放開始選單檔案夾路徑. 此頁面將會用它記住用戶的首選項. 你也可以將其用於卸載程式移除此開始選單檔案夾. 不要在卸載時忘記移除此註冊表項.

對於卸載程式, 可以用宏 MUI_STARTMENU_GETFOLDER 取得開始選單檔案夾路徑:

!insertmacro MUI_STARTMENU_GETFOLDER page_id $R0
  Delete "$SMPROGRAMS\$R0\Your Shortcut.lnk"

Open/Close section 安裝頁面設定

MUI_INSTFILESPAGE_FINISHHEADER_TEXT text
當安裝完成後, 顯示於此安裝頁面頁眉的文字(當使用一個未用 MUI_(UN)FINISHPAGE_NOAUTOCLOSE 的完成頁面時, 將不會顯示這些文字).

MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT text
當安裝完成後, 顯示於此安裝頁面頁眉的旁白(當使用一個未用 MUI_(UN)FINISHPAGE_NOAUTOCLOSE 的完成頁面時, 將不會顯示這些文字).

MUI_INSTFILESPAGE_ABORTHEADER_TEXT text
當安裝被結束後, 顯示於此安裝頁面頁眉的文字.

MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT text
當安裝被結束後, 顯示於此安裝頁面頁眉的旁白.

Open/Close section 完成頁面設定

MUI_FINISHPAGE_TITLE title
顯示於頁面頂部的標題.

MUI_FINISHPAGE_TITLE_3LINES
標題區域的額外空區.

MUI_FINISHPAGE_TEXT text
顯示於此頁面的文字. 用 \r\n 換行.

MUI_FINISHPAGE_TEXT_LARGE
文字區域的額外空區 (如果使用了復選框).

MUI_FINISHPAGE_BUTTON text
顯示於 "完成" 按鈕的文字.

MUI_FINISHPAGE_TEXT_REBOOT text
當詢問是否重啟時, 顯示於完成頁面的文字. 用 \r\n 換行.

MUI_FINISHPAGE_TEXT_REBOOTNOW text
顯示在 "現在重啟" 選擇按鈕旁的文字.

MUI_FINISHPAGE_TEXT_REBOOTLATER text
顯示在 "以後重啟" 選擇按鈕旁的文字.

MUI_FINISHPAGE_RUN exe_file
可以通過復選框決定是否運行的應用程式. 當檔案名稱中有空格時, 你不需用引號將其括起來.

MUI_FINISHPAGE_RUN_TEXT text
顯示在 "運行程式" 復選框旁的文字.

MUI_FINISHPAGE_RUN_PARAMETERS parameters
運行應用程式所需的參數. 不要在值中直接使用雙引號 (用 $\").

MUI_FINISHPAGE_RUN_NOTCHECKED
預設不選中 '運行程式' 復選框.

MUI_FINISHPAGE_RUN_FUNCTION function_name
用調用一個函數替代執行一個應用程式 (定義 MUI_FINISHPAGE_RUN 而不用參數). 你可以用這個函數執行多個應用程式, 或者你可以更改此復選框的名稱並用它做其它事情.

MUI_FINISHPAGE_SHOWREADME file/url
可以通過復選框決定是否觀看的檔案或網站. 當檔案名稱中有空格時, 你不需用引號將其括起來.

MUI_FINISHPAGE_SHOWREADME_TEXT text
顯示在 "顯示自述" 復選框旁的文字.

MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
預設不選中 '顯示自述' 復選框.

MUI_FINISHPAGE_SHOWREADME_FUNCTION function_name
用調用一個函數替代顯示一個檔案 (定義 MUI_FINISHPAGE_SHOWREADME 而不用參數). 你可以用這個函數顯示多個檔案, 或者你可以更改此復選框的名稱並用它做其它事情

MUI_FINISHPAGE_LINK link_text
一個用於用戶按這裡觀看一個網站或檔案的連結的文字.

MUI_FINISHPAGE_LINK_LOCATION file/url
可以通過這個連結觀看的網站或檔案的位置. 當檔案名稱中有空格時, 你不需用引號將其括起來.

MUI_FINISHPAGE_LINK_COLOR (color: RRGGBB hexadecimal)
完成頁面上的連結的文字顏色.
預設: 000080

MUI_FINISHPAGE_NOREBOOTSUPPORT
禁用支援此頁面允許用戶重新啟動其系統. 如果不使用 /REBOOTO 位標計或 SetRebootFlag, 那麼定義此選項可以節省一些空間.

Open/Close section 卸載確認頁面設定

MUI_UNCONFIRMPAGE_TEXT_TOP text
顯示於頁面頂部的文字.

MUI_UNCONFIRMPAGE_TEXT_LOCATION text
顯示在卸載位置文字框旁的文字.

Open/Close section 高級頁面設定

你可以向你的 Modern UI 頁面的頁面函數中新增自定義代碼. 更多訊息...

4. 自定義函數

如果你想向由 Modern UI 插入的函數中新增你自己的代碼 (例如, .onGUIInit 函數和頁面函數), 建立你自己的函數並讓 Modern UI 函數調用它們.

更多訊息...

5. 語言檔案

插入與你所要包含的語言相對應的 Modern UI 語言檔案.

!insertmacro MUI_LANGUAGE "English"

Modern UI 語言檔案要載入 NLF 語言檔案, 因此你不應使用 LoadLanguageFile.

Open/Close section 語言選擇對話框

如果你想令安裝程式顯示一個語言選擇對話框 (請先看看範例 MultiLanguage.nsi), 只需在.onInit 函數中插入 MUI_LANGDLL_DISPLAY 宏:

Function .onInit

  !insertmacro MUI_LANGDLL_DISPLAY

FunctionEnd

你也可以在卸載程式中使用這個宏, 只需將其插入 un.onInit 函數中.

Open/Close section 語言選擇對話框設定

若要記住用戶的首選項, 你可以定義一個註冊表項.
注意: 這些定義應當在插入安裝頁面宏之前進行設定.

MUI_LANGDLL_REGISTRY_ROOT root
MUI_LANGDLL_REGISTRY_KEY key
MUI_LANGDLL_REGISTRY_VALUENAME value_name
此註冊表項用於存放語言. 它記住用戶的首選項. 你也可以將其用於卸載程式顯示正確的語言. 不要在卸載時忘記移除此註冊表項.

對於卸載程式, 可以通過向 un.onInit 函數中插入宏 MUI_UNGETLANGUAGE 取得儲存的語言首選項:

Function un.onInit

  !insertmacro MUI_UNGETLANGUAGE

FunctionEnd

Open/Close section 語言選擇對話框介面設定

若要定制語言選擇對話框介面, 請在插入宏 MUI_LANGDLL_DISPLAY 之前使用這些定義.

MUI_LANGDLL_WINDOWTITLE text
語言選擇對話框的標題.

MUI_LANGDLL_INFO text
顯示於語言選擇對話框的文字.

MUI_LANGDLL_ALWAYSSHOW
總是顯示語言選擇對話框, 即使一種語言已經儲存在了註冊表中. 儲存於註冊表中的語言將會被預設選中.

6. 保留檔案

如果你要使用固實壓縮 (在預設情況下, 啟用了 BZIP2 和 LZMA 的固實壓縮), 那麼很重要的一點是, 在執行init- 或頁面函數時被提取的檔案在資料塊中的定位應先於其它檔案, 因為這樣會令你的安裝程式運行地更快.

如果在你的區段中有檔案命令, 或是在 init- 或頁面函數之前有函數, 那麼請在你的區段和函數之前新增保留檔案宏.

ReserveFile "ioFile.ini" ;你自己的 InstallOptions INI 檔案
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions 插件
!insertmacro MUI_RESERVEFILE_LANGDLL ;語言選擇對話框

7. 你自己的區段和函數

新增你的安裝程式區段和函數. 若要得到詳細訊息, 請觀看 NSIS 用戶手冊.

你可以在手冊中找到關於建立開始選單快捷方式和語言選擇的區段代碼,函數代碼的訊息.

8. 區段描述

當用戶將鼠標懸浮於一個區段時, 此區段的描述將會顯示於此組件頁面上. 如果你不想使用描述, 那麼請使用 MUI_COMPONENTSPAGE_NODESC 介面設定.

若要為一個區段設定描述, 你必須向此區段命令新增一個附加參數, 此區段命令有一個用於應當包含此區段號碼的定義的名稱.

Section "區段名稱 1" Section1
   ...
SectionEnd

通過這些宏設定描述:

LangString DESC_Section1 ${LANG_ENGLISH} "區段描述 1."
LangString DESC_Section2 ${LANG_ENGLISH} "區段描述 2."

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
  !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

對於卸載程式, 則應使用宏 MUI_UNFUNCTION_DESCRIPTION_BEGIN 和 MUI_UNFUNCTIONS_DESCRIPTION_END.

自定義頁面

如果你想向你的安裝程式中新增你自定義的頁面, 你應當在頁面宏之間新增你自己的頁面命令.

!insertmacro MUI_PAGE_WELCOME
Page custom FunctionName ;自定義頁面
!insertmacro MUI_PAGE_COMPONENTS

;卸載程式
!insertmacro MUI_UNPAGE_CONFIRM
UninstPage custom un.FunctionName ;自定義頁面
!insertmacro MUI_UNPAGE_INSTFILES

Open/Close section 使用用於自定義頁面的 InstallOptions

InstallOptions 是一個顯示自定義頁面的插件, 它可以通過 INI 檔案建立頁面.

請先看看 InstallOptions 文件, 以得到關於建立 InstallOptions INI 檔案的訊息.

首先, 你必須通過宏 MUI_INSTALLOPTIONS_EXTRACT 從 .onInit (對於卸載程式為 un.onInit) 之中提取你的 InstallOptions INI 檔案:

Function .onInit
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "ioFile.ini"
FunctionEnd

如果你的 INI 檔案位於另一個目錄中, 可以使用 MUI_INSTALLOPTIONS_EXTRACT_AS. 第二個參數是對於臨時插件目錄的檔案名稱, 使用這個檔案名稱作為其它 InstallOptions 宏的參數.

Function .onInit
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "..\ioFile.ini" "ioFile.ini"
FunctionEnd

你可以調用由此頁面定義的函數中的 Install Options, 或通過宏 MUI_INSTALLOPTIONS_DISPLAY 調用 UninstPage 命令. 通過宏 MUI_HEADER_TEXT 設定頁面頁眉的文字:

LangString TEXT_IO_TITLE ${LANG_ENGLISH} "安裝選項頁面標題"
LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "副題"

Function FunctionName ;FunctionName defined with Page command
  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "ioFile.ini"
FunctionEnd

若要自定義字型和顏色, initDialog 的宏和 InstallOptions 的顯示函數也可用:

Var HWND
Var DLGITEM
Var FONT

LangString TEXT_IO_TITLE ${LANG_ENGLISH} "安裝選項頁面標題"
LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "副題"

Function FunctionName ;由頁面命令定義的 FunctionName

  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"

  !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "ioFile.ini"
  Pop $HWND ;對話框的視窗句柄
    
  GetDlgItem $DLGITEM $HWND 1200 ;1200 + 字段號碼 - 1
    
  ;$DLGITEM 包含第一個字段的視窗句柄
  CreateFont $FONT "Tahoma" 10 700 
  SendMessage $DLGITEM ${WM_SETFONT} $FONT 0
        
  !insertmacro MUI_INSTALLOPTIONS_SHOW

FunctionEnd

如果你需要 InstallOptions 返回值 (完成, 回退, 取消, 錯誤), 請使用宏 MUI_INSTALLOPTIONS_DISPLAY_RETURN 或 MUI_INSTALLOPTIONS_SHOW_RETURN. 此返回值將會被新增到堆棧中, 因此你可以用 Pop 命令取得此值.

通過這些宏讀取或寫入 INI 檔案值:

!insertmacro MUI_INSTALLOPTIONS_READ $VAR "ioFile.ini" "字段 #" "名稱"
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioFile.ini" "字段 #" "名稱" "值"

例如, 你可以使用一個區段中的宏 MUI_INSTALLOPTIONS_READ 取得用戶的輸入:

!insertmacro MUI_INSTALLOPTIONS_READ $R0 "ioFile.ini" "字段 1" "狀態"

若要得到更多關於 InstallOptions, 用戶輸入確認等詳細訊息, 請檢查 InstallOptions 文件.

Open/Close section 自定義標準對話框

若要更改對話框上的元素, 請使用自定義的用戶介面資源檔案 (請觀看 介面配置). 你可以用 Resource Hacker 這樣的應用程式修改你的原始檔案 (在檔案夾 Contrib\UIs 中) 的副本.

當安裝程式啟動時, 顯示的啟動閃屏(正在校驗安裝程式, 正在解壓縮資料)上的文字 " 請稍候, 安裝程式正在加載...", 可以通過擁有一個經修改的對話框的自定義用戶介面資源檔案(MUI_UI 設定)更改.
"正在校驗安裝程式" 和 "正在解壓縮資料" 文字是由 NSIS exehead (Source\exehead\lang.h) 中的語言頭檔案定義的. 若要更改這些文字, 你必須編輯這個檔案並重新編譯 NSIS.

若要修改歡迎對話框和完成對話框, 請使用一個自定義 INI 檔案 (MUI_SPECIALINI 設定), 或是向自定義頁面函數中的 INI 檔案寫入.

自定義 Modern UI 函數

如果你想向由 Modern UI 插入的函數中新增你自己的代碼 (例如 .onGUIInit 函數和頁面函數), 以及建立你自己的函數並讓 Modern UI 函數調用它們. 請用這些定義定義你的函數的名稱.

範例:

!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit

Function myGUIInit
  ...你自己的代碼...
FunctionEnd

Open/Close section 慣用自定義函數

應當在插入語言宏之前設定這些定義.

MUI_CUSTOMFUNCTION_GUIINIT function
MUI_CUSTOMFUNCTION_UNGUIINIT function
MUI_CUSTOMFUNCTION_ABORT function
MUI_CUSTOMFUNCTION_UNABORT function

Open/Close section 頁面自定義函數

應當在插入一個頁面宏之前設定這些定義

MUI_PAGE_CUSTOMFUNCTION_PRE function
MUI_PAGE_CUSTOMFUNCTION_SHOW function
MUI_PAGE_CUSTOMFUNCTION_LEAVE function

注意:

  • 開始選單頁面沒有 "Show" 函數
  • 在開始頁面和完成頁面的 "Pre" 函數中, 你可以向此頁面 (ioSpecial.ini) 的 InstallOptions INI 檔案中寫入
  • 在開始頁面和完成頁面的 "Show" 函數中, $MUI_HWND 包含了內部對話框的視窗句柄

Open/Close section 歡迎/完成頁面自定義函數

這個定義應當在單個歡迎或結束頁面之前插入.

MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT function

應當在寫入此頁面的 InstallOptions INI 檔案之前調用 "Init" 函數, 這樣你可以用它初始化用於此頁面設定的任何變量.

範例

基本: Basic.nsi
歡迎/完成頁面: WelcomeFinish.nsi
多種語言: MultiLanguage.nsi
頁眉圖檔: HeaderBitmap.nsi
自定義頁面: InstallOptions.nsi
開始選單檔案夾頁面: StartMenu.nsi

版本歷史

  • 1.70 - 2004年, 2月, 6日
    • 改進的文件
    • 用於歡迎和完成頁面的新的 "Init" 自定義函數

完整版本歷史

參與名單

由 Joost Verburg 製作.
由 Nikos Adamamas, aka adni18 進行圖檔設計.
感謝 Amir Szekely, aka KiCHiK, 由於他們的工作才令 NSIS 成為可能.

幫助

請到 NSIS 論壇 送出問題

許可

zlib/libpng 許可將應用於 Modern UI.

Open/Close section 許可條款

版權所有 © 2002-2004 Joost Verburg

此軟體由 "as-is" 提供, 且沒有任何明確的或隱含的擔保. 如果由於使用這個軟體
而造成了任何損失, 那麼作者將不承擔任何責任.
許可任何人出自於任何目的使用這個軟體, 包括商業應用, 隨意修改本軟體並自由地重
新發表此軟體, 但應服從以下限制:

1. 不應虛報此軟體的原創者; 你不能聲稱是你是這個軟體的原創者.
   如果你在一個產品中使用了這個軟體, 那麼在產品文件中的承認將會令人感激,但
   這不是必需的.
2. 經更改的版本必須明確地標記, 且不能虛報初始軟體.
3. 任何發表版本都不會更改或移除這個佈告.