; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "signjing安裝示例"
!define PRODUCT_VERSION "0.0.0.1"
!define PRODUCT_PUBLISHER "signjing"
!define PRODUCT_WEB_SITE "http://blog.csdn.net/signjing"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\GenPat.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
......
;個性化圖素;
!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\util\nsis_uis\白玉山塔.bmp"
!define MUI_WELCOMEPAGE_TITLE "\r\n signjing安裝示例向導"
!define MUI_WELCOMEPAGE_TEXT " signjing安裝示例是signjing開發的一個NSIS安裝示例軟件。\r\n\r\n 軟件作者:signjing \r\n\r\n 官方網址:http://blog.csdn.net/signjing\r\n\r\n $_CLICK"
注釋
以 ; 或 #開始的行為注釋行。可以在命令后面添加注釋,也可以使用C規范的注釋來注釋一行或多行。如果參數需要由;或#開頭,可以用雙引號把它括起來。
如:
; 注釋
# 注釋
/*
注釋
注釋
*/
!define
[/date] 符號 [值]
這個命令將會向全局定義列表中添加“符號”。這個效果與對編譯器使用 /D命令行切換效果相似。(只有在 !define 命令之后,定義才有效)
如果使用了 /date,則定義的值會被格式化為 strtime格式。strtime 會把代表當前的時間日期轉換為實際的值。例如 %H會轉換為當前時間的 24 小時格式。完整的格式化字串列表你可以查找 MSDN。在 POSIX平台,你可以使用 man strtime 來獲取列表。
如:
!define USE_SOMETHING
!define VERSION 1.2
!define /date NOW "%H:%M:%S %d %b, %Y"
變量
所有的變量都是全局的並且可以用於區段和函數。需要注意的是,在默認情況下變量被限制在 1024字節。要擴大這個限制你需要重新構建一個使用了更大 NSIS_MAX_STRLEN值的 NSIS 或使用特別版本。
!include
文件這個命令可以將一個文件包含到腳本中,就像是腳本的一部分一樣。請注意,如果一個文件包含在了另一個目錄中,那么當前目錄仍是編譯腳本的地方(不是要包含的文件所在的目錄)。如果編譯器無法找到文件,那么它將會在每一個包含目錄中查找。
常量
常量通常用在 InstallDir屬性里。
需要注意的是一些新的常量並不是在所有的 OS上都是正常的。例如 $CDBURN_AREA 僅在 Windows XP及以上系統中才正常。如果在 Windows 98 中使用將會得到空值。除非特別提示,否則該常量都是在所有 OS上有效的。
$PROGRAMFILES
程序文件目錄(通常為 C:\Program Files但是運行時會檢測)。
$COMMONFILES
公用文件目錄。這是應用程序共享組件的目錄(通常為 C:\Program Files\Common Files但是運行時會檢測)。
$DESKTOP
Windows 桌面目錄(通常為 C:\windows\desktop但是運行時會檢測)。該常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。
$EXEDIR
安裝程序運行時的位置。(從技術上來說你可以修改改變量,但並不是一個好方法)。
${NSISDIR}
包含 NSIS 安裝目錄的一個標記。在編譯時會檢測到。常用於在你想調用一個在 NSIS 目錄下的資源時,例如:圖標、界面……
$WINDIR
Windows 目錄(通常為 C:\windows或 C:\winnt 但在運行時會檢測)
$SYSDIR
Windows 系統目錄(通常為 C:\windows\system或 C:\winnt\system32 但在運行時會檢測)
$TEMP
系統臨時目錄(通常為 C:\windows\temp但在運行時會檢測)
$STARTMENU
開始菜單目錄(常用於添加一個開始菜單項,使用 CreateShortCut)。該常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext 設置。默認為當前用戶。
$SMPROGRAMS
開始菜單程序目錄(當你想定位 $STARTMENU\程序時可以使用它)。該常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext 設置。默認為當前用戶。
$SMSTARTUP
開始菜單程序/啟動目錄。該常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。
$QUICKLAUNCH
在 IE4 活動桌面及以上的快速啟動目錄。如果快速啟動不可用,僅僅返回和 $TEMP一樣。
$DOCUMENTS
文檔目錄。一個當前用戶典型的路徑形如 C:\Documents and Settings\Foo\My Documents。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext 設置。默認為當前用戶。該常量在 Windows 95且 Internet Explorer 4 沒有安裝時無效。
$SENDTO
該目錄包含了“發送到”菜單快捷項。
$RECENT
該目錄包含了指向用戶最近文檔的快捷方式。
$FAVORITES
該目錄包含了指向用戶網絡收藏夾、文檔等的快捷方式。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。該常量在 Windows 95 且 Internet Explorer 4沒有安裝時無效。
$MUSIC
用戶的音樂文件目錄。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。該常量僅在 Windows XP、ME及以上才有效。
$PICTURES
用戶的圖片目錄。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。該常量僅在 Windows 2000、XP、ME及以上才有效。
$VIDEOS
用戶的視頻文件目錄。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。該常量僅在 Windows XP、ME及以上才有效。
$NETHOOD
該目錄包含了可能存在於我的網絡位置、網上鄰居文件夾的鏈接對象。該常量在 Windows 95且 Internet Explorer 4 和活動桌面沒有安裝時無效。
$FONTS
系統字體目錄。
$TEMPLATES
文檔模板目錄。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。
$APPDATA
應用程序數據目錄。當前用戶路徑的檢測需要 Internet Explorer 4及以上。所有用戶路徑的檢測需要 Internet Explorer 5 及以上。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。該常量在Windows 95 且 Internet Explorer 4和活動桌面沒有安裝時無效。
$LOCALAPPDATA
本機應用程序數據目錄。該常量僅在 Windows 2000或以上系統有效。.
$PRINTHOOD
該目錄包含了可能存在於打印機文件夾的鏈接對象。該常量在 Windows 95和 Windows 98 上無效。
$INTERNET_CACHE
Internet Explorer的臨時文件目錄。該常量在 Windows 95 和 Windows NT且 Internet Explorer 4 和活動桌面沒有安裝時無效。
$COOKIES
Internet Explorer的 Cookies 目錄。該常量在 Windows 95和 Windows NT 且 Internet Explorer 4和活動桌面沒有安裝時無效。
$HISTORY
Internet Explorer的歷史記錄目錄。該常量在 Windows 95 和 Windows NT且 Internet Explorer 4 和活動桌面沒有安裝時無效。
$PROFILE
用戶的個人配置目錄。一個典型的路徑如 C:\Documents and Settings\Foo。該常量在 Windows 2000及以上有效。
$ADMINTOOLS
一個保存管理工具的目錄。這個常量的內容(所有用戶或當前用戶)取決於 SetShellVarContext設置。默認為當前用戶。該常量在 Windows 2000、ME及以上有效。
$RESOURCES
該資源目錄保存了主題和其他 Windows資源(通常為 C:\Windows\Resources但在運行時會檢測)。該常量在 Windows XP及以上有效。
$RESOURCES_LOCALIZED
該本地的資源目錄保存了主題和其他 Windows資源(通常為 C:\Windows\Resources\1033但在運行時會檢測)。該常量在 Windows XP及以上有效。
$CDBURN_AREA
一個在燒錄 CD 時儲存文件的目錄。該常量在 Windows XP 及以上有效。
$HWNDPARENT
父窗口的十進制窗口句柄。
$PLUGINSDIR
該路徑是一個臨時目錄,當第一次使用一個插件或一個調用 InitPluginsDir時被創建。該文件夾當安裝程序退出時會被自動刪除。這個文件夾的用意是用來保存給 InstallOptions使用的 INI 文件、啟動畫面位圖或其他插件運行需要的文件。
字串里使用的常量
$$
轉義,用來表示 $。
$\r
用來表示一個回車(\r)。
$\n
用來表示新的一行(\n)。
$\t
用來表示一個 Tab(\t)。
!insertmacro、Name、OutFile、InstallDir、InstallDirRegKey、ShowInstDetails、ShowUnInstDetails、BrandingText
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "協議許可.rtf"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\Bin\GenPat.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
;OutFile "Setup.exe"
;OutFile "${PRODUCT_NAME}.exe"
OutFile "自定義.exe"
InstallDir "$PROGRAMFILES\signjing安裝示例"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
BrandingText " signjing博客 http://blog.csdn.net/signjing"
!insertmacro
宏名稱 [參數] [...]
插入一個由 !macro 創建的宏的內容。如果創建的宏帶有參數,那么你必須按宏的需求向它傳送足夠的參數。
!macro Print text
DetailPrint "${text}"
!macroend
!insertmacro Print "some text"
!insertmacro Print "some more text"
name
名稱 [雙與名稱]
設置安裝程序的名稱。名稱通常用來顯示產品的名稱比如“我的程序””。如果在名稱里有一個或多個與符號(&),把第二個參數設為與第一個相同,有 &的地方使用兩個 &來表示。例如你的產品名稱為“foo & bar2000”,那么使用:
Name "foo & bar2000" "foo && bar2000"
如果你的安裝程序名稱里有 & 符號並且對名稱使用了一個 LangString,那么你還需要創建另一個含有雙 &字符的名稱作為第二個參數。
接受變量。如果使用了變量,使用的變量必須在 .onInit被初始化。
outfile
[路徑\]安裝程序.exe
指定 MakeNSIS 要寫入安裝程序的輸出文件。僅僅是 MakeNSIS 要寫入的文件,它不會對安裝程序的內容有任何影響。
installdir
默認安裝目錄設定默認的安裝目錄。查看變量一節得到可用於該字串的變量(尤其是 $PROGRAMFILES)。注意該字串中最后一個 \后面的部分會被保留,當用戶在安裝時選擇“瀏覽”並取得新的目錄字串時,該部分會自動附加在后面(要禁止該行為你需要在目錄字串后面添加一個額外的 \,但是你要使用引號把目錄字串括起來以避免被認為是斷行處理)。如果沒有起作用的話,還是使用瀏覽按鈕吧。
installdirregkey
根鍵子鍵鍵名該屬性讓安裝程序去檢測一注冊表里的一個字串,如果該字串可用那么把它用來作為安裝目錄。如果預置了該屬性,當指定的注冊表鍵可用時它會越過 InstallDir指定的字串,否則使用默認的 InstallDir 指定值。查詢注冊表時,該命令將自動截去引號(如 "C:\program files\poop" "%1",可得到 C:\program files\poop )。如果該字串以 .exe結尾,它還會自動移去字串里的文件名部分(如 C:\program files\poop\poop.exe,將得到 C:\program files\poop )。對於更多高級的安裝目錄配置,可在 .onInit函數里設定 $INSTDIR。[譯者注:事實上它還可以自動截取如 "C:\program files\poop\poop.exe" "%1"而得到 C:\program files\poop ,這樣你只要知道了某個程序關聯的文件類型,就可以直接用它獲得該程序的安裝目錄。比如 InstallDirRegKey HKCR "FlashGet.Document\shell\open\command" "" 即可獲得網際快車的安裝目錄]
showinstdetails
hide|show|nevershow
設置是否顯示安裝詳細信息。你可以設為 hide來隱藏詳細信息但用戶可以查看,show 用來默認顯示詳細信息,nevershow可以阻止用戶查看任何信息。注意區段里可以使用 SetDetailsView 來更改它的設置。
showuninstdetails
hide|show|nevershow
設置是否顯示卸載詳細信息。你可以設為 hide來隱藏詳細信息但用戶可以查看,show 用來默認顯示詳細信息,nevershow可以阻止用戶查看任何信息。注意區段里可以使用 SetDetailsView 來更改它的設置。
brandingtext
/TRIM(LEFT|RIGHT|CENTER)文本設置顯示在安裝程序窗口底部的文本(默認為“Nullsoft Install System vX.XX”)。如果設為空字串("")則使用默認值;設為" "(一個空格)則顯示空白。如果你不知道哪個適合你,那就保留默認值吧,這樣可以使每個人知道你使用的 NSIS版本。使用 /TRIMLEFT、/TRIMRIGHT或 /TRIMCENTER 來裁剪控制大小到字串大小。
section、SetOutPath、SetOverwrite、File、CreateDirectory、CreateShortCut、SectionEnd
Section "MainSection" SEC01
SetOutPath "$INSTDIR\Bin"
SetOverwrite try
File "..\..\Program Files\NSIS\Bin\GenPat.exe"
CreateDirectory "$SMPROGRAMS\signjing安裝示例"
CreateShortCut "$SMPROGRAMS\signjing安裝示例\signjing安裝示例.lnk" "$INSTDIR\Bin\GenPat.exe"
CreateShortCut "$DESKTOP\signjing安裝示例.lnk" "$INSTDIR\Bin\GenPat.exe"
……
File "..\..\Program Files\NSIS\NSIS.chm"
CreateShortCut "$SMPROGRAMS\signjing安裝示例\Help.lnk" "$INSTDIR\NSIS.chm"
……
SetOutPath "$INSTDIR"
File "..\..\Program Files\NSIS\uninst-nsis.exe"
SectionEnd
Section
[/o] [([!]|[-])區段名] [區段索引輸出]
開始並且打開一個新的區段。如果區段名為空、遺漏或者以一個 -開頭,那么它將是一個隱藏的區段,用戶也不能選擇禁止它。如果一個區段名為“Uninstall”或以“un.”為前綴,那么它就是一個卸載程序區段。如果指定了區段索引輸出,該參數將被定義 (!defined)為區段索引(然后可以對它使用 SectionSetText等)。如果區段名以一個 !開頭,那么該區段的顯示名稱將以粗體字顯示。如果指定了 /o 開關,則該區段默認為不選。
Section "-隱藏區段"
SectionEnd
Section # 隱藏區段
SectionEnd
Section "!描黑區段"
SectionEnd
Section /o "可選區段"
SectionEnd
Section "某些安裝" SEC_IDX
SectionEnd
SectionEnd
該命令關閉當前打開的區段。
SetOutPath
輸出路徑設置輸出路徑($OUTDIR)且當路徑不存在時創建(需要時會遞歸創建)。必須為全路徑名,通常都使用 $INSTDIR。
SetOutPath $INSTDIR
File program.exe
SetOverwrite
on|off|try|ifnewer|ifdiff|lastused
該命令設置了由 File 命令使用的覆蓋標記來決定目標文件已存在時是否覆蓋。如果覆蓋標記為 on ,則目標文件被覆蓋(這個是默認值)。如果覆蓋標記為 off ,則已存在的文件不會被覆蓋。如果覆蓋標記為 try ,文件僅當可以被覆蓋時(就是說假如文件不能寫入,它會自動略過而不需要用戶決定)才會覆蓋目標文件。如果覆蓋標記為 ifnewer,則僅當已存在的文件比新文件舊時才會覆蓋目標文件。如果覆蓋標記為 ifdiff ,則僅當已存在的文件比新文件舊或新時才會覆蓋目標文件。注意在ifnewer 或 ifdiff模式下,目標文件的日期都會被設為新文件的日期,而不管 SetDateSave 是怎么設置的。
SetOverwrite off
File program.cfg #配置文件將不會覆蓋
SetOverwrite on
File
[/nonfatal] [/a] ([/r] [/x文件|通配符 [...]] (文件|通配符) [...] | /oname=輸出路徑\文件名輸入路徑\文件名)
釋放文件到當前輸出路徑($OUTDIR)。
注意輸出文件名是 $OUTDIR\文件名。
如果使用了 /oname=X 開關,則輸出文件會變為 $OUTDIR\X。當使用了 /oname=開關時只能指定一個文件,且輸出的文件名可以使用變量(或完整路徑如 $SYSDIR\whatever.dll)。如果輸出名稱包含了空格,你需要用雙引號把參數括起來,包括 /oname,就像下面例子顯示的那樣。
支持通配符。
如果使用了 /r 開關,匹配的文件將會在子目錄里被遞歸的搜索。如果目錄名匹配則所有包含的內容都會被遞歸添加。目錄結構也會被保持。
使用 /x 開關可以用來來排除文件或目錄。
如果使用了 /a 開關,則被添加的文件的屬性將會保持。
如果覆蓋模式被設定為 try 並且文件不能覆蓋,那么 File 命令將會置一個錯誤標記,或者如果覆蓋模式被設定為 on並且文件不能覆蓋並用戶選擇了忽略時,也會放置一個錯誤標記。
如果使用了 /nonfatal開關且當文件未找到時使用警告來代替錯誤。
File something.exe
File /a something.exe
File *.exe
File /r *.dat
File /r data
File /oname=$TEMP\temp.dat somefile.ext
File "/oname=$TEMP\name with spaces.dat" somefile.ext
File /nonfatal "一個可能不存在的文件"
File /r /x CVS myproject\*.*
File /r /x *.res /x *.obj /x *.pch source\*.*
CreateDirectory
要創建的路徑
創建 (遞歸創建)指定的目錄。當目錄不能創建時會放置一個錯誤標記。
你也可以指定一個絕對路徑。
CreateDirectory $INSTDIR\some\directory
CreateShortCut
快捷文件.lnk 目標文件 [參數 [圖標文件 [圖標索引號 [啟動選項 [鍵盤快捷鍵 [描述]]]]]]
創建一個指向“目標文件”的快捷方式“快捷文件.lnk”,可以帶“參數”參數。用於快捷方式的圖標為“圖標文件,圖標索引號”;要使用默認圖標的話把“圖標文件”和“圖標索引號”設為空字串。“啟動選項”可以是它們之一: SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, 或一個空字串。“鍵盤快捷鍵”應該為 flag|c格式且 flag 可以聯合使用(使用 |): ALT, CONTROL, EXT,或 SHIFT。c為要使用的字符(a-z, A-Z, 0-9, F1-F24 等等)。注意在這些字串里不能含有空格。一個典型的例子為 "ALT|CONTROL|F8"。$OUTDIR被用來作為工作目錄。你可以在創建快捷方式之前使用 SetOutPath 來指定或更改。“描述”為快捷方式的描述,或在 XP 下作為注釋調用。當快捷方式不能創建的時候會放置一個錯誤標記(例如路徑 (鏈接路徑或目標路徑)不存在或一些其它錯誤)。
CreateDirectory "$SMPROGRAMS\My Company"
CreateShortCut "$SMPROGRAMS\My Company\My Program.lnk" "$INSTDIR\My Program.exe" \
"some command line parameters" "$INSTDIR\My Program.exe" 2 SW_SHOWNORMAL \
ALT|CTRL|SHIFT|F5 "a description"
WriteIniStr、WriteUninstaller、WriteRegStr
Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\signjing安裝示例\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\signjing安裝示例\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Bin\GenPat.exe"
......
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
WriteINIStr
INI文件區段項值把“項” =“值”寫入“INI文件”的“區段名”區段。如果 INI文件不能寫入則放置一個錯誤的標記。
WriteINIStr $TEMP\something.ini section1 something 123
WriteINIStr $TEMP\something.ini section1 somethingelse 1234
WriteINIStr $TEMP\something.ini section2 nsis true
WriteUninstaller
[路徑\]可執行文件名.exe
由指定的文件名(路徑為可選項)寫入卸載程序。僅在一個安裝區段或函數里有效,並且你的腳本里必須有一個卸載區段。也可以參考卸載配置。你可以調用一次或多次來寫入一個或多個卸載程序(副本)。
WriteUninstaller $INSTDIR\uninstaller.exe
WriteRegStr
根鍵子鍵項值把字串寫入注冊表。詳細信息請查看 WriteRegExpandStr。
WriteRegStr HKLM "Software\My Company\My Software" "String Value" "dead beef"
函數、Function、HideWindow、MessageBox、Abort、FunctionEnd、Delete、RMDir、DeleteRegKey、SetAutoClose
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從你的計算機移除。"
FunctionEnd
Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你確實要完全移除 $(^Name),其及所有的組件?" IDYES +2
Abort
FunctionEnd
Section Uninstall
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"
……
Delete "$INSTDIR\Bin\GenPat.exe"
Delete "$SMPROGRAMS\signjing安裝示例\Uninstall.lnk"
……
Delete "$SMPROGRAMS\signjing安裝示例\signjing安裝示例.lnk"
RMDir "$SMPROGRAMS\signjing安裝示例"
……
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd
函數
函數類似於區段因為他們可以包含零個或多個指令。用戶函數不會被安裝程序直接調用,而必須在區段里使用 Call指令來調用。而當一個必然事件發生時回調函數將由安裝程序調用。
函數必須在區段或其他函數之外聲明。
Function
[函數名]
開始並打開一個新的函數。一般函數名以 .開頭的(例如 ".Whatever")作為回調函數保留。函數名以 un.開頭的函數將會被創建在卸載程序里。因此,普通安裝區段和函數不能調用卸載函數,而卸載區段和卸載函數也不能調用普通安裝程序的函數。
Function func
# 一些命令
FunctionEnd
Section
Call func
SectionEnd
FunctionEnd
該命令關閉當前打開的函數。
HideWindow
隱藏安裝程序。
MessageBox
消息框選項列表消息框文本 [/SD返回] [檢測返回值跳轉到標記] [檢測返回值2跳轉到標記2]
顯示一個包含“消息框文本”的消息框。“消息框選項列表”必須為下面的一個或多個,多個使用 |來隔開(例如 MB_YESNO|MB_ICONSTOP)。
MB_OK - 顯示 OK 按鈕
MB_OKCANCEL - 顯示 OK 和取消按鈕
MB_ABORTRETRYIGNORE -顯示退出、重試、忽略按鈕
MB_RETRYCANCEL -顯示重試和取消按鈕
MB_YESNO - 顯示是和否按鈕
MB_YESNOCANCEL -顯示是、否、取消按鈕
MB_ICONEXCLAMATION -顯示驚嘆號圖標
MB_ICONINFORMATION -顯示信息圖標
MB_ICONQUESTION -顯示問號圖標
MB_ICONSTOP - 顯示終止圖標
MB_TOPMOST - 使消息框在最前端顯示
MB_SETFOREGROUND -設置前景
MB_RIGHT - 右對齊文本
MB_RTLREADING - RTL閱讀次序
MB_DEFBUTTON1 -默認為按鈕 1
MB_DEFBUTTON2 -默認為按鈕 2
MB_DEFBUTTON3 -默認為按鈕 3
MB_DEFBUTTON4 -默認為按鈕 4
“檢測返回值”可以為 0(或空,或保留關閉),或下列之一:
IDABORT - 退出按鈕
IDCANCEL - 取消按鈕
IDIGNORE - 忽略按鈕
IDNO - 否按鈕
IDOK - OK 按鈕
IDRETRY - 重試按鈕
IDYES - 是按鈕
如果消息框的返回值為“檢測返回值”,則安裝程序執行跳轉。
用 /SD 來指定一個上面列出的返回值當在安裝程序靜默安裝時作為返回值。詳細信息請查看 section 4.12。
MessageBox MB_OK "簡單消息框"
MessageBox MB_YESNO "真的嗎?" IDYES true IDNO false
true:
DetailPrint "是真的!"
Goto next
false:
DetailPrint "是假的"
next:
MessageBox MB_YESNO "真的嗎?(靜默安裝時默認為是)" /SD IDYES IDNO false2
DetailPrint "是真的 (或靜默)!"
Goto next2
false2:
DetailPrint "是假的"
next2:
Abort
[用戶信息]取消安裝,停止執行腳本,並且在狀態顯示里顯示用戶信息。注意:你可以用於回調函數來實現一些特殊功能。頁面回調也可以用 Abort 來實現特殊目的。
Abort
Abort "不能安裝"
Delete
[/REBOOTOK] 文件從目標系統刪除文件(可以是文件或通配符,但必須指定一個完整的路徑)。如果指定了 /REBOOTOK並且該文件當前不可刪除,則會在系統重啟時刪除該文件 -- 如果該文件要在系統重啟時刪除,你還要設置一個重啟的標記。如果找到的文件不能被刪除則會置一個錯誤標記。但該錯誤標記不是為嘗試刪除一個不存在的文件設置的。
RMDir
[/r] [/REBOOTOK]目錄名刪除指定的目錄(完整路徑)。沒有 /r參數時只有在目錄為空時才會被刪除。如果指定了 /r,則目錄會被遞歸刪除,所以在指定目錄下的所有文件和目錄均被刪除。如果指定了 /REBOOTOK,任何當前不能刪除的文件或目錄將會在重啟后被刪除——如果文件或目錄需要在重啟時被刪除,會放置一個重啟的標記。當文件或目錄不能被刪除時放置一個錯誤的標記。
RMDir $INSTDIR
RMDir $INSTDIR\data
RMDir /r /REBOOTOK $INSTIDR
RMDir /REBOOTOK $INSTDIR\DLLs
需要注意的是當前的工作目錄不能刪除。當前的工作目錄由 SetOutPath設定。例如,下面的例子里將不能刪除該目錄。
SetOutPath $TEMP\dir
RMDir $TEMP\dir
而下面的例子可以刪除該目錄。
SetOutPath $TEMP\dir
SetOutPath $TEMP
RMDir $TEMP\dir
DeleteRegKey
[/ifempty] 根鍵子鍵刪除一個注冊表鍵。如果指定了 /ifempty,則該注冊表鍵僅當它無子鍵時才會被刪除(否則,整個注冊表鍵將被刪除)。有效的根鍵值在后面的 WriteRegStr列出。如果該鍵不能被刪除(或如果它不存在)則會放置一個錯誤的標記。
DeleteRegKey HKLM "Software\My Company\My Software"
DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys"
SetAutoClose
true|false
取代默認的窗口自動關閉標記(由 AutoCloseWindow指定,且對於寫在程序為 false)。指定 true將使得安裝程序在安裝完成時立即關閉窗口,或者 false 來使它需要手動關閉。
一個向導默認生成的腳本便包含了這么多的語法,當然nsis的語法遠不止這些。這並沒有什么大不了了,隨着對語法和nsis的了解和掌握,隨着地編寫腳本進行實踐,這些語法、插件等資源都將為你服務。