一、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 学习笔记,如有错误之处,欢迎指正。