NSIS語法解析


注釋、!define、變量、!include、常量

; 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的了解和掌握,隨着地編寫腳本進行實踐,這些語法、插件等資源都將為你服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM