简介

NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS 是通过它的脚本语言来描述安装程序的行为和逻辑的。NSIS 的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。

工具:

HW VNISEdit(NSIS脚本编辑器)

1、 使用编辑器中NSIS脚本向导功能,自动生成对应的nsi脚本。

点击文件->新建脚本:向导,接下来根据向导页面的设置选项一步步设置你需要的安装条件。

2、也可以在编辑器中编写nsi脚本,然后再编译生成exe安装包文件。

脚本结构

NSIS脚本(下称nsi脚本)主要包含安装程序属性、页面、区段、函数。

属性

用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。

页面

安装程序的向导页面

例:

Page license

Page components

Page directory

Page instfiles

UninstPage uninstConfirm

UninstPage instfiles

区段

是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。卸载程序的区段名用"un."作为前缀。

例:

Section "Installer Section"

SectionEnd

Section "un.Uninstaller Section"

SectionEnd

区段名的修饰符/o表示该区段默认不选上,-表示隐藏区段(匿名区段也是隐藏区段),!表示需要粗体显示的区段。

SectionIn表示该区段和安装类型之间的关系

SubSection表示子区段

SectionIn insttype_index [insttype_index] ... [RO]

;RO修饰符表示不可修改。

SubSection [/e] Caption [subsection_name index output]

;修饰符/e用于该子区段的所有区段是否默认展开。

函数

包含了模块化的安装逻辑。

在nsi脚本中函数分为两种:用户自定义函数和回调函数。

用户自定义函数

用户自定义函数仅当是Call指令调用时才被执行,如果函数体中没有abort语句,则安装程序执行完了用户自定义函数,继续运行Call语句和指令。

用户自定义函数的语法:

Function <函数名>

# some commands

FunctionEn

回调函数

回调函数则是由在特定的时间点触发的程序段。

例:

Function .onInit

MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo

Abort

gogogo:

FunctionEnd

安装逻辑回调函数

NSIS对于安装逻辑定义以下回调函数:

.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、.onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、.onVerifyInstDir

卸载逻辑回调函数

NSIS对于卸载逻辑定义以下回调函数:
”和“字串2”,如果两者相等,跳转到“相同时跳转的标记”,否则跳转到“不相同时跳转的标记”。

逻辑操作

Push

作用:把一个字串压入堆栈,该字串可随后从堆栈里弹出。

Pop

作用:从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的,则会置一个错误标记。

if

(1) IfAbort 退出时要跳转的标记 [不是退出时要跳转的标记]

如果调用退出时它将返回 true

(2) IfErrors 错误时跳转的标记 [没有错误时跳转的标记]

检测并清除错误标记,如果设了错误标记,则跳转到“错误时跳转的标记”,否则跳转到“没有错误时跳转的标记”。

(3)IfFileExists 要检测的文件 文件存在时跳转的标记 [文件不存在时跳转的标记]

检测“要检测的文件”是否存在(可以用通配符,或目录),并当文件存在时跳转到“文件存在时跳转”,否则跳转到“文件不存在时跳转”。

Goto

作用:跳转到指定标记。nsi脚本常常使用相对跳转表示条件分枝,其语法是[+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。数字表示跳转的语句条数。

例:

按数字跳转

Goto +4 ; 跳转以下4条语句

Goto -3 ; 跳转到前3条语句

例:

按标记跳转

name "NSISDemo"

outfile 'NSISDemo.exe'

Section "NSISDemo"

ReadRegStr $R0 HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Test "DisplayVersion"

IntCmp $R0 "5.0" is5 lessthan5 morethan5  ;详情查看 帮助4.9.4.13 IntCmp

is5:

DetailPrint "$R0 == 5.0"

Goto int

lessthan5:

DetailPrint "$R0 < 5.0"

Goto error2

morethan5:

DetailPrint "$R0 > 5.0"

Goto error1

int:

MessageBox MB_OK  "你系统中现有版本为$R0,点击OK安装更新" IDOK

DetailPrint "安装版本为: $R0"

goto done

error1:

MessageBox MB_ICONSTOP|MB_OK  "你系统中版本$R0高于更新版本" IDOK

error2:

MessageBox MB_ICONSTOP|MB_OK  "你系统中版本$R0低于更新版本" IDOK

done:

SectionEnd

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

参考

官方论坛:http://forums.winamp.com/forumdisplay.php?s=&forumid=65

NSIS中文论坛:http://www.nsisfans.com/

轻狂志博客(NSIS大神):http://www.flighty.cn/html/bushu/index.html

最新文章

  1. linux下命令行操作快捷键及技巧
  2. LYDSY热身赛 escape
  3. linux下获取本机IP
  4. Entity Framework 自动生成CodeFirst代码
  5. 【POJ】2954 Triangle(pick定理)
  6. mysql学习笔记6——用phpmyadmin和在腾讯微云中创建数据库
  7. 利用if else判断是否及格
  8. Nginx高性能服务器安装、配置、运维 (3) —— Nginx配置详解
  9. 一个用C++写的Json解析与处理库
  10. Android 建造者(Builder)模式
  11. Docker基础入门及示例
  12. 对象是存入cookie中需要注意
  13. 2n的 位数
  14. Lua的 table.sort排序
  15. 什么是Spring Boot?
  16. Java的第一个晞月自己打的程序
  17. UVA196
  18. 【SpringCloud】Netflix源码解析之Ribbon:负载均衡策略的定义和实现
  19. windows环境下mongodb下载、安装和使用总结
  20. 如何使用vue的axios结合PHP去上传文件

热门文章

  1. .NET面试题系列[8] - 泛型
  2. TODO:macOS上ThinkPHP5和Semantic-UI集成
  3. ExtJS 4.2 介绍
  4. 基于AOP的MVC拦截异常让代码更优美
  5. 设置tomcat远程debug
  6. Python自然语言处理工具小结
  7. RabbitMQ + PHP (一)入门与安装
  8. 《动手实现一个网页加载进度loading》
  9. 打破陈规抓痛点,H3 BPM10.0挑战不可能
  10. 在MySQL数据库中创建一个完整的表