NSIS 打包脚本基础
简介
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
NSIS 打包脚本基础的更多相关文章
- NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...
- NSIS打包软件使用
NSIS打包软件使用 最近做的一个调用远程桌面的小应用需要打个安装包,并且在安装的时候需要添加注册表,我之前使用的都是"Advanced Installer"来打包应用程序的,这个 ...
- 从游戏脚本语言说起,剖析Mono所搭建的脚本基础
0x00 前言 在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”.那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又能提供怎样的脚本基础 ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- xcode8.3 shell 自动打包脚本 记录
题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...
- bat脚本基础教程
bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上.本文主要介绍bat脚本基础语法,希望完成本文内容学习之后具备基础的bat脚本开发能 ...
- Linux下Maven+SVN自动打包脚本
公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ...
- assetBundle打包脚本与LUA
AssetBundles与脚本 所有Unity的AssetBundle,无论是从本地获取 还是www,或者打包整个场景.物体上的脚本都不会被编译.所以AssetBundle打包的时候即使物体上有脚本. ...
- React Native开发中自动打包脚本
React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...
随机推荐
- 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...
- PowerShell实现批量重命名文件
[string]$FileName="E:\test11" #-------------------------------------- Clear-Host foreach($ ...
- Canvas坐标系转换
默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...
- .net windows Kafka 安装与使用入门(入门笔记)
完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS 在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- HTTP API接口安全设计
HTTP API接口安全设计 API接口调用方式 HTTP + 请求签名机制 HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? OAuth授权机制 OAuth2.0服务 ...
- css样式之border-image
border-image-source 属性设置边框的图片的路径[none | <image>] div { border: 20px solid #000; border-image-s ...
- 跟着老男孩教育学Python开发【第二篇】:Python基本数据类型
运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**3 ...
- 创建maven项目(cmd 命令)
2016五月 22 原 创建maven项目(cmd 命令) 分类:maven (994) (0) 1.普通方式创建 1)进入cmd窗口执行 mvn archetype:generate 2) 光标停止 ...