1. 程式人生 > >NSIS的基本語法---邏輯、字串、外部呼叫、ini檔案

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  - 是按鈕

參考:

官方論壇

NSIS中文論壇

輕狂志部落格

NSIS使用手冊

靜默虛空

 

Ma_Hong_Kai 學習筆記,如有錯誤之處,歡迎指正。