NSIS的基本語法---邏輯、字串、外部呼叫、ini檔案
一、INI檔案操作
1、ReadINIStr(INI檔案)
作用:從ini檔案的[section_name]中的entry_name讀取並將值儲存到使用者變數$ x中。將設定錯誤標誌,如果未找到該條目,則將$ x分配給空字串。
ReadINIStr $0 $INSTDIR\winamp.ini winamp outname
二、外部呼叫
1、ReserveFile
作用:把檔案儲存在稍後使用的資料區塊用於下面的呼叫。有時,預先打包檔案,方便安裝加速釋放之用
[/nonfatal] [/r] [/x file|wildcard [...]] file [file...]
ReserveFile "TimeZoneZh.ini"
2、Exec
作用:執行指定的程式並立即繼續
請注意,指定的檔案必須存在於目標系統上,而不是編譯系統上。$ OUTDIR用於工作目錄。如果無法啟動程序,則會設定錯誤標誌。注意,如果命令可以有空格,則應將其放在引號中以從引數中分隔它。
Exec '"$INSTDIR\command.exe" parameters'
3、ExecWait
作用:執行指定的程式並等待執行的程序退出結果
command [user_var(exit code)]
ExecWait '"$INSTDIR\someprogram.exe"' $0
4、ExecShell
作用:使用ShellExecute執行指定的程式。請注意,操作通常是“開啟”,“列印”等,但可以是使用預設操作的空字串。引數和show型別是可選的。$ OUTDIR用於工作目錄。如果無法啟動程序,則會設定錯誤標誌
action command [parameters] [SW_SHOWDEFAULT | SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMI
ExecShell "open" "http://nsis.sf.net/"
ExecShell "open" "$INSTDIR\readme.txt"
ExecShell "print" "$INSTDIR\readme.txt"
5、RegDLL
作用:載入指定的 DLL 並且呼叫 DllRegisterServer (或入口點名稱,當指定之後)。當產生一個錯誤的時候會置一個錯誤標記(例如不能載入 DLL,不能初始化 OLE,不能找到入口點,或者函式返回任何其它錯誤 ERROR_SUCCESS (=0))。
其實就是註冊或載入你要的外掛!
SetOutPath $INSTDIR
RegDLL $INSTDIR\foo.dll
6、UnRegDLL
作用:載入指定的DLL並呼叫DllUnregisterServer。如果發生錯誤,則設定錯誤標誌(即,它無法載入DLL,初始化OLE,查詢入口點,或者函式返回除ERROR_SUCCESS(= 0)以外的任何內容)。
7、!include
作用:包含標頭檔案
!include WinMessages.nsh
8、!insertmacro
作用:插入巨集
;通過巨集插入歡迎頁面
!insertmacro MUI_PAGE_WELCOME
三、字串操作
1、StrCpy
作用:拷貝字元創
user_var(destination) str [maxlen] [start_offset]
使用str設定使用者變數$ x。請注意,str可以包含其他變數,或者正在設定的使用者變數(以這種方式連線字串等)。如果指定了maxlen,則字串將是maxlen字元的最大值(如果maxlen為負數,則字串將從末尾截斷abs(maxlen)個字元)。如果指定了start_offset,則源將被它偏移(如果start_offset為負,則它將從字串的末尾開始abs(start_offset))。
StrCpy $0 "a string" # = "a string"
StrCpy $0 "a string" 3 # = "a s"
StrCpy $0 "a string" -1 # = "a strin"
StrCpy $0 "a string" "" 2 # = "string"
StrCpy $0 "a string" "" -3 # = "ing"
StrCpy $0 "a string" 3 -4 # = "rin"
2、StrCmp
str1 str2 jump_if_equal [jump_if_not_equal]
比較(不區分大小寫)str1到str2。如果str1和str2相等,則Gotos jump_if_equal,否則Gotos jump_if_not_equal。
StrCmp $0 "a string" 0 +3
DetailPrint '$$0 == "a string"'
Goto +2
DetailPrint '$$0 != "a string"'
3、StrLen
作用:使用str的長度設定使用者變數$ x
StrLen $0 "123456" # = 6
四、邏輯操作
1、Push
作用:把一個字串壓入堆疊,該字串可隨後從堆疊裡彈出。
2、Pop
作用:從堆疊裡彈出一個字串到使用者變數 $x。如果堆疊是空的,則會置一個錯誤標記
Push 1
Pop $0 # = 1
3、if
(1)IfAbort
label_to_goto_if_abort [label_to_goto_if_no_abort]
作用:如果呼叫abort,它將“返回”為true。如果使用者選擇對無法建立(或覆蓋)的檔案進行中止,或者使用者手動中止,則會發生這種情況。只能從instfiles 頁面的leave函式呼叫此函式
Function instfilesLeave
IfAbort 0 +2
MessageBox MB_OK "user aborted"
FunctionEnd
(2)IfErrors
作用:檢查並清除錯誤標誌,如果設定了,它將轉到jumpto_iferror,否則它將轉到jumpto_ifnoerror。當發生可恢復的錯誤(例如嘗試刪除正在使用的檔案)時,錯誤標誌由其他指令設定。
jumpto_iferror [jumpto_ifnoerror]
IfErrors 0 +2
Call ErrorHandler
(3)IfFileExists
file_to_check_for jump_if_present [jump_otherwise]
作用:檢查檔案file_to_check_for(可以是萬用字元或目錄)是否存在,如果檔案存在則檢查Gotos jump_if_present,否則檢查Gotos jump_otherwise。如果要檢查檔案是否是目錄,請使用IfFileExists DIRECTORY \ *.*
IfFileExists $WINDIR\notepad.exe 0 +2
MessageBox MB_OK "notepad is installed"
4、Goto
作用:跳轉到指定標記。nsi指令碼常常使用相對跳轉表示條件分枝,其語法是[+-][1-9],加號表示從當前位置往前跳轉,減號則表示從當前位置往後跳轉。數字表示跳轉的語句條數。
label_to_jump_to | +offset| -offset| user_var(target)
如果呼叫abort,它將“返回”為true。如果使用者選擇對無法建立(或覆蓋)的檔案進行中止,或者使用者手動中止,則會發生這種情況。只能從instfiles 頁面的leave函式呼叫此函式 。
Goto label
Goto +2
Goto -2
Goto $0
5、MessageBox
mb_option_list messagebox_text [/SD return] [return_check jumpto] [return_check_2 jumpto_2]
顯示包含文字“messagebox_text”的MessageBox。mb_option_list必須是以下中的一個或多個,由| s分隔(例如MB_YESNO | MB_ICONSTOP)
- MB_OK - 使用OK按鈕顯示
- MB_OKCANCEL - 顯示確定和取消按鈕
- MB_ABORTRETRYIGNORE - 顯示中止,重試,忽略按鈕
- MB_RETRYCANCEL - 顯示重試和取消按鈕
- MB_YESNO - 顯示是和否按鈕
- MB_YESNOCANCEL - 顯示是,否,取消按鈕
- MB_ICONEXCLAMATION - 顯示帶感嘆號圖示
- MB_ICONINFORMATION - 顯示資訊圖示
- MB_ICONQUESTION - 顯示問號圖示
- MB_ICONSTOP - 顯示停止圖示
- MB_USERICON - 顯示安裝程式的圖示
- MB_TOPMOST - 使訊息框最頂層
- MB_SETFOREGROUND - 設定前景
- MB_RIGHT - 右對齊文字
- MB_RTLREADING - RTL讀取順序
- MB_DEFBUTTON1 - 按鈕1是預設值
- MB_DEFBUTTON2 - 按鈕2是預設值
- MB_DEFBUTTON3 - 按鈕3是預設值
- MB_DEFBUTTON4 - 按鈕4是預設值
Return_check可以是0(或空或停止),或者以下之一:
- IDABORT - 中止按鈕
- IDCANCEL - 取消按鈕
- IDIGNORE - 忽略按鈕
- IDNO - 沒有按鈕
- IDOK - 確定按鈕
- IDRETRY - 重試按鈕
- IDYES - 是按鈕
參考:
Ma_Hong_Kai 學習筆記,如有錯誤之處,歡迎指正。