上一頁 | 目錄 | 下一頁

5.1 編譯器命令

這些命令在用途和功能性方面與 C 預處理器很相似。它們都允許檔案內含,條件編譯,可執行的頭部封包,以及在構建程序期間處理執行。注意:這些命令都不允許使用變量。

5.1.1 !include

檔案

這個命令可以將一個檔案包含到腳本中,就像是腳本的一部分一樣。請注意,如果一個檔案包含在了另一個目錄中,那麼目前目錄仍是編譯腳本的地方(不是要包含的檔案所在的目錄)。如果編譯器無法找到檔案,那麼它將會在每一個包含目錄中尋找。若要得到更多訊息,請觀看 !addincludedir

!include WinMessages.nsh
!include Library.nsh
!include MyConfig.nsh
!include ..\MyConfig.nsh

5.1.2 !addincludedir

目錄

向包含目錄列表中新增另一個包含目錄。當使用 !include 時,將會按這個列表搜尋。這個列表的初始值只有 ${NSISDIR}\Include。

!addincludedir ..\include
!include something.nsh

5.1.3 !addplugindir

目錄

NSIS 編譯器用於搜尋插件 DLL 的目錄。

!addplugindir myplugin
MyPlugin::SomeFunction

5.1.4 !cd

新路徑

這個命令將會令編譯器更改為一個新路徑 —— 「新路徑」。新路徑可以為相對路徑或絕對路徑。

!cd ..\more-scripts\new

5.1.5 !echo

訊息

這個命令將會回顯一條用戶編譯腳本的消息。

!echo "hello world"

5.1.6 !error

[訊息]

這個命令將會發表一個腳本編譯器的錯誤,並停止執行腳本。你也可以向這個錯誤新增一條消息。

!ifdef VERSION & NOVERSION
  !error "不能同時定義 VERSION 和 NOVERSION"
!endif

5.1.7 !execute

命令

這個指令將調用 CreateProcess() 來執行一個命令。和 !system 不一樣,它不使用命令行處理程式,所以輸如輸出都被重定向並且命令行裡的 cd、dir、type 等命令都不能使用。!execute 同時也不接受執行命令的返回值。目前 !execute 對於 !system 的好處就是當目前工作路徑為 UNC 的時候不會引起問題。

在 POSIX 平台,!execute 使用 system() 就和!system 一樣。

!execute '"%WINDIR%\notepad.exe" "${NSISDIR}\license.txt"'

5.1.8 !packhdr

臨時檔案 命令

這個選項可以讓編譯器使用 EXE 加殼軟體(例如 PetiteUPX)壓縮可執行檔案。請先指定一個臨時檔案名稱(例如 "temp.dat")以及命令行(例如 "C:\program files\upx\upx -9 temp.dat")壓縮檔案。

!packhdr "$%TEMP%\exehead.tmp" '"C:\Program Files\UPX\upx.exe" "$%TEMP%\exehead.tmp"'

5.1.9 !system

命令 [比較運算符 比較值]

這個命令將會通過調用 system() 來執行,並且如果比較過 「比較值」 以後的返回值為 false,那麼編譯將會被結束。「比較運算符」 可以為 < 、> 、<> 或 =。

!system '"%WINDIR%\notepad.exe" "${NSISDIR}\license.txt"'
!system 'echo !define something > newinclude.nsh'
!include newinclude.nsh
!ifdef something
  !echo "something is defined"
!endif
;僅當 VPatch 返回 0(表示完成) 時繼續,否則停止編譯。
!system '""${NSISDIR}\Contrib\VPatch\GenPat.exe" "C:\old-file.exe" "C:\new-file.exe" "C:\patch.pat""' = 0

5.1.10 !warning

[訊息]

這個命令將會輸出一個腳本編譯器的警告,但不會停止執行腳本。你也可以向這個警告新增一條消息。

!ifdef USE_DANGEROUS_STUFF
  !warning "using dangerous stuff"
!endif

5.1.11 !verbose

等級 | push | pop

這個命令將會設定編譯輸出訊息的等級。 4=全部訊息, 3=沒有腳本訊息, 2=沒有訊息, 1=沒有警告訊息, 0=無輸出。

通過 push 可以把 !verbose 目前的等級壓入一個特殊的堆棧。通過 pop 可以把 !verbose 儲存在堆棧中的等級彈出並使用該等級。

如果你的腳本比較大你可以在腳本開頭設定 !verbose 3 來減少編譯訊息輸出耗時,從而加快編譯速度。

!verbose push
!verbose 1
!include WinMessages.nsh
!verbose pop

上一步 | 目錄 | 下一步