上一页 | 目录 | 下一页

5.1 编译时的命令

这些命令在用途和功能性方面与 C 预处理器很相似。它们都允许文件内含,条件编译,可执行的文件头部压缩,以及在构建过程期间流程执行。注意:这些命令都不允许使用变量。

5.1.1 !include

[/NONFATAL] 文件

这个命令可以将一个文件包含到原始脚本中,就像是原始脚本的一部分一样。如果一个文件包含在了另一个目录中,那么当前目录仍是编译脚本的地方(不是要包含的文件所在的目录)。如果编译器无法找到文件,那么它将会在每一个包含目录中查找。欲了解更多信息,请查看 !addincludedir 。如果使用了 /nonfatal 开关的话当要包含的文件未找到的时候用警告来代替错误。

!include WinMessages.nsh
!include Library.nsh
!include C:\MyConfig.nsi
!include ..\MyConfig.nsh
!include /NONFATAL 可能存在也可能不存在的文件.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 !appendfile

文件 文本

文本 附加到 文件里。

!tempfile FILE
!appendfile "${FILE}" "XPStyle on$\n"
!appendfile "${FILE}" "Name 'test'$\n"
!include "${FILE}"
!delfile "${FILE}"
!undef FILE

5.1.5 !cd

新路径

这个命令将会令编译器更改为一个新路径 —— “新路径”。新路径可以为相对路径或绝对路径。

!cd ..\more-scripts\new

5.1.6 !delfile

文件

此命令用于删除一个文件。

!tempfile FILE
!delfile "${FILE}"
!undef FILE

5.1.7 !echo

信息

这个命令将会回显一条用户编译脚本的消息。

!echo "hello world"

5.1.8 !error

[信息]

这个命令将会发布一个脚本编译器的错误,并停止执行脚本。你也可以向这个错误添加一条消息。

!ifdef VERSION & NOVERSION
  !error "不能同时定义 VERSION 和 NOVERSION"
!endif

5.1.9 !execute

命令

这个指令将调用 CreateProcess() 来执行一个 '命令'。和 !system, 不一样,它不使用命令行处理程序,所以输入、输出都被重定向并且命令行里的 'cd', 'dir' 和 'type' 等命令都不能使用。 !execute 同时也不接受执行命令的返回值。 目前, !execute 对于 !system 的好处就是当前工作路径为 UNC 的时候不会引起问题。

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

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

5.1.10 !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.11 !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

5.1.12 !tempfile

符号

此命令创建一个临时文件。路径会被添加到定义列表里,名称为 符号

!tempfile PACKHDRTEMP
!packhdr "${PACKHDRTEMP}" '"C:\Program Files\UPX\upx.exe" "${PACKHDRTEMP}"'
!tempfile FILE
!define /date DATE "%H:%M:%S %d %b, %Y"
!system 'echo built on ${DATE} > "${FILE}"'
File /oname=build.txt "${FILE}"
!delfile "${FILE}"
!undef FILE
!undef DATE

5.1.13 !warning

[信息]

这个命令将会输出一个脚本编译器的警告,但不会停止执行脚本。你也可以向这个警告添加一条消息。

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

5.1.14 !verbose

级别 | push | pop

这个命令将会设置编译输出信息的级别。 4=全部信息, 3=没有脚本信息, 2=没有信息, 1=没有警告信息, 0=无输出。

通过 push 可以把 !verbose 当前的级别压入一个特殊的堆栈。通过 pop 可以把 !verbose 保存在堆栈中的级别弹出并使用该级别。

(如果你的脚本比较大你可以在脚本开头设置 !verbose 3 来减少编译信息输出耗时,从而加快编译速度。)

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

上一页 | 目录 | 下一页