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

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值