NSIS脚本
NSIS(Nullsoft Scriptable Install System)的开源的Windows系统下的安装程序制作工具,它提供了安装、卸载、系统设置、文件压缩等等功能,通过NSIS脚本语言来涉及安装程序设计。
相关工具
基本语法
变量
nsi脚本用var来定义变量,使用$来进行引用,除了用户自定义的变量(全局)外,nsi脚本中定义了寄存器变量0~9,R0~R9用于参数传递,以及系统变量用于特定用途,这些变量主要有:
变量 | 描述 |
---|---|
$INSTDIR | 用户定义的解压路径 |
$PROGRAMFILES | 程序文件目录(通常为 C:\Program Files 但是运行时会检测)。 |
$COMMONFILES | 公用文件目录。这是应用程序共享组件的目录(通常为 C:\Program Files\Common Files 但是运行时会检测)。 |
$DESKTOP | Windows 桌面目录(通常为 C:\windows\desktop 但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
${NSISDIR} | NSIS安装目录,编译时会检测到 |
$WINDIR | Windows目录(通常为C:\windows,在运行时会检测) |
$SYSDIR | Windows 系统目录(通常为 C:\windows\system,在运行时会检测) |
$TEMP | 系统临时目录(通常为 C:\windows\temp,运行时会检测) |
$SMPROGRAMS | 开始菜单程序目录,使用CreateShortCut来创建快捷方式。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
$SENDTO | 该目录包含了“发送到”菜单快捷项。 |
$RECENT | 该目录包含了指向用户最近文档的快捷方式。 |
$FAVORITES | 该目录包含了指向用户网络收藏夹、文档等的快捷方式。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
$MUSIC | 用户的音乐文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
$PICTURES | 用户的图片目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
$VIDEOS | 用户的视频文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
$FONTS | 系统字体目录。 |
$TEMPLATES | 文档模板目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。 |
$APPDATA | |
$COOKIES | Internet Explorer 的 Cookies 目录。 |
$HISTORY | Internet Explorer 的历史记录目录。 |
$RESOURCES | 该资源目录保存了主题和其他 Windows 资源(通常为 C:\Windows\Resources 但在运行时会检测),Windows XP 及以上有效 |
常用命令
- !include
- 作用:包含头文件
!include "MUI.nsh"
- !insertmacro
- 作用:插入宏
!insertmacro MUI_PAGE_WELCOME
- Goto
- 作用:跳转到指定标记。[+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。数字表示跳转的语句条数。
Goto +4 ;跳转以下4条语句 Goto -3 ; 跳转到前3条语句
- File
- 作用:释放文件到当前输出路径
- 参数
- /r 目录匹配的所有的内容进行递归添加,而且目录结构也会保持。
- /x 排除文件或目录
- /a 保持被添加的文件的属性
- /nonfatal 当文件未找到使用警告来代替错误
File /r *.*
- Delete
- 作用:删除文件
Delete "$INSTDIR\uninst.exe"
- RMDir
- 作用:删除目录
RMDir "$INSTDIR"
- Rename
- 作用:文件重命名
- CreateShortCut
- 作用:创建快捷方式
- CreateShortCut “DESKTOP\Test.lnk”“DESKTOP\Test.lnk”“INSTDIR\Test.exe” “” “$INSTDIR\Resources\Picture\Icon\ Test.ico”
- CreateDirectory
- 作用:递归创建目录。当目录不能创建时给出错误标记。
CreateDirectory "$SMPROGRAMS\Log Download"
- StrCpy
- 作用:复制字符串
StrCpy $0 "a bbbbbbbb" ;$0 = "a bbbbbbbb"
- StrCmp
- 作用:字符串比较,如果字符串1和字符串2相等则调转到第一个标记处,否则调转到第二个标记处。
StrCmp a b fun1 fun2
- ReadRegDWORD
- 作用:读取注册表信息
- MessageBox
- 作用:显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个,多个使用 | 来隔开。
- MB_OK - 显示 OK 按钮
- MB_OKCANCEL - 显示 OK 和取消按钮
- MB_ABORTRETRYIGNORE - 显示退出、重试、忽略按钮
- MB_RETRYCANCEL - 显示重试和取消按钮
- MB_YESNO - 显示是和否按钮
- MB_YESNOCANCEL - 显示是、否、取消按钮
- MB_ICONEXCLAMATION - 显示惊叹号图标
- MB_ICONINFORMATION - 显示信息图标
- MB_ICONQUESTION - 显示问号图标
- MB_ICONSTOP - 显示终止图标
- MB_TOPMOST - 使消息框在最前端显示
- MB_SETFOREGROUND - 设置前景
- MB_RIGHT - 右对齐文本
- MB_RTLREADING - RTL 阅读次序
- MB_DEFBUTTON1 - 默认为按钮 1
- MB_DEFBUTTON2 - 默认为按钮 2
- MB_DEFBUTTON3 - 默认为按钮 3
- MB_DEFBUTTON4 - 默认为按钮 4
- 作用:显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个,多个使用 | 来隔开。
脚本实现
修改Head图片
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "installheader.bmp"
修改界面左侧的图片信息
!define MUI_WELCOMEFINISHPAGE_BITMAP "installheader.bmp"
修改安装和卸载图标
!define MUI_ICON "${NSISDIR}\install.ico"
!define MUI_UNICON "${NSISDIR}\uninstall.ico"
创建快捷方式
CreateShortCut "$SMPROGRAMS\Test\Test.lnk" "$INSTDIR\Test.exe"
CreateShortCut "$DESKTOP\Test.lnk" "$INSTDIR\Test.exe"
设置安装界面语言
!insertmacro MUI_LANGUAGE "SimpChinese" ;简体中文
!insertmacro MUI_LANGUAGE "English" ;英文
显示安装和卸载进度
ShowInstDetails show
ShowUnInstDetails show
显示消息框
Section "MainSection" SEC01
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File /r *.*
MessageBox MB_OKCANCEL "OK | Cancel"
SectionEnd