NSIS打包(一)常用概念简介
1、NSIS简介
官网:http://sourceforge.net/projects/nsis/
维基百科:
http://zh.wikipedia.org/wiki/Nullsoft%E8%85%B3%E6%9C%AC%E5%AE%89%E8%A3%9D%E7%B3%BB%E7%B5%B1
2、Section
想main函数对于C语言一样,Section是NSIS的入口,区别在于:C语言中main函数只有一个,NSIS中Section却可以有多个,但最少得有一个。
NSIS中的Section按照在文件中的顺序依次执行。
所有的 Section 都是按照从上到下的顺序执行的,每个 Section 可以用 /o 参数指定默认不选中,也可以使用 SectionSetFlags之类的命令来更改状态。并非每个Section都一定会执行:假如你显示了组件页面,除了你用脚本或命令来控制选择,用户也可以更改组件状态,NSIS 自动根据是否选择来决定执行。如果你没有显示组件页面,那么当然会根据组件的最终状态(使用 Section /o 预设状态以及 SectionSetFlags 更改状态)来决定是否执行。
3、Page
Page指的是安装程序的向导页面。
4、Function
NSIS中的函数分为用户自定义函数和回调函数。
自定义函数需要通过Call命令来调用,回调函数是在特定的时间点触发的程序段。
以下是几个基本的回调函数,以on开头的是安装过程的回调,以un.on开头的是卸载过程的回调:
|
.onGUIInit |
第一个页面被载入并且显示安装程序对话框前被调用,允许你来调整用户界面。 |
|
.onInit |
在当安装程序接近完成初始化时调用。如果 .onInit 函数调用了 Abort,则安装程序立即退出。 |
|
.onInstFailed |
该回调函数当在安装失败后用户点击“取消”按钮时被调用 (如果安装程序不能释放任何文件,或安装脚本使用了 Abort 命令)。 |
|
.onInstSuccess |
当安装成功且正当安装窗口关闭前 (如果 AutoCloseWindow 或 SetAutoClose 被设为 false 时可能在用户点击“关闭”之后) 调用。 |
|
. onGUIEnd |
正当安装程序窗口关闭之后被调用。需要时用来释放任何与用户界面有关的插件。 |
|
.onMouseOverSection |
只要鼠标在树形区段选择框上移动时就被调用。这可以使你给每个区段设置一个样本描述。鼠标停留所在的当前区段 ID 已被临时的保存,为 $0。 |
|
.onRebootFailed |
当 Reboot 指令失败时被调用。WriteUninstaller、plug-ins、File 和 WriteRegBin 不能用于该回调函数。 |
|
.onSelChange |
当在组件选择页面选项被改变时被调用。常用于使用 SectionSetFlags 和 SectionGetFlags。 |
|
.onUserAbort |
当用户点击“取消”按钮且安装尚未失败时被调用。如果该函数调用 Abort,则安装将不退出。 |
|
.onVerifyInstDir |
该回调对于你的安装程序来说可以允许代为控制安装路径是否有效。每次用户更改安装路径的时候这段代码都会被调用一次,所以不要在这里使用 MessageBox 等傻指令。如果该函数调用 Abort,则 $INSTDIR 的路径被认为无效。 |
|
un.onGUIInit |
在第一个页面被载入并且显示卸载程序对话框前被调用,允许你来调整卸载程序的界面。 |
|
un.onInit |
当卸载程序接近完成初始化时调用。如果 un.onInit 函数使用了 Abort ,则卸载程序立即退出。注意如果需要时该函数可以验证和/或修改 $INSTDIR。 |
|
un.onUninstFailed |
当在卸载失败后用户点击“取消”按钮时被调用 (如果使用了 Abort 命令或其它失败的命令)。 |
|
un.onUninstSuccess |
当卸载成功且正当卸载程序窗口关闭前 (如果 SetAutoClose 被设为 false 时可能在用户点击“关闭”之后) 调用。 |
|
un.onGUIEnd |
正当卸载程序窗口关闭之后被调用。需要时用来释放任何与用户界面有关的插件。 |
|
un.onRebootFailed |
当 Reboot 指令失败时被调用。WriteUninstaller、plug-ins、File 和 WriteRegBin 不能用于该回调函数。 |
|
un.onUserAbort |
当用户点击“取消”按钮且卸载尚未失败时被调用。如果该函数调用 Abort,则卸载程序将不退出。 |
5、指令
指令主要指仅在编译时刻执行的命令,主要包括:包含文件、条件化编译、定义常量、定义宏等。
例如:
定义常量:!define PI 3.14
定义宏:
!macro name parameterlist
!macroend
调用宏:!insertmacro name
以上是最常用的组件,简单说明了下概念,接下来正式开始打包旅程。
NSIS打包(一)常用概念简介的更多相关文章
- 007-elasticsearch5.4.3【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念
一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 L ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Sublime 常用插件简介
Sublime 常用插件简介 emmet: 前端必备神器.花个十几分钟学下Emmet语法 ,就可以极大提高web开发者HTML和CSS工作效率啦.一句话,牛逼---必备 CSS3: CSS3语法高 ...
- SpringBoot常用配置简介
SpringBoot常用配置简介 1. SpringBoot中几个常用的配置的简单介绍 一个简单的Spring.factories # Bootstrap components org.springf ...
- 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .
1.2. Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l 第一个比较常用的就是Application级Scope,通常我们会将一 ...
- NSIS API 函数常用备份
原文:NSIS API 函数常用备份 关闭程序: System::Call `user32::AnimateWindow(i$HWNDPARENT,i200,i${AW_BLEND}|${AW_HID ...
- Redis API与常用数据类型简介
Redis API与常用数据类型简介 一.Redis API For .Net 首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些 ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
- Java多线程概念简介 多线程中篇(一)
Java的线程与操作系统的线程 在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...
随机推荐
- 使用excel快速制表 拒绝粗心
办公室打印个表格 使用了word打印后 发现 id重复很多 只好网上找了点excel 2003资料 学习小 快速制作表格 新建一个excel文件. 在新建excel中,用鼠标选中需要的表格行数列数,然 ...
- 分析器错误 MvcApplication 找不到
<%@ Application Codebehind="Global.asax.cs" Inherits="test.MvcApplication" La ...
- Gradle for Android
1.project vs project.rootProject 2.System.console() != null ? System.console().readPassword("\n ...
- C++虚函数的实现机制示例
C++虚函数的实现机制是通过一个vtable表,指向子类的虚函数地址. 另外,如果不是虚函数,则不能实现用父类引用调用子类方法. #include <windows.h> #include ...
- Gym 100960G (set+树状数组)
Problem Youngling Tournament 题目大意 给一个序列a[i],每次操作可以更改一个数,每次询问 将序列排序后有多少个数a[i]>=sum[i-1]. n<=10^ ...
- [转]概率DP总结 by kuangbin
概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...
- Qt线程(2) QThread中使用WorkObject
一般继承QThread的WorkThread都会在重载的run()中创建临时的WorkObject,这样能确定这个WorkObject在该thread中使用 那如果这个WorkObject是个Sing ...
- 相同vlan之间的相互访问
- tomcat切割日志的shell脚本
#!/bin/bash cd /usr/tomcats/ d=`date +%F` m1=`date -d'1 month ago' +%F` ` do cd tomcat808"$i&qu ...
- AndroidStudio开发出现Warning:Gradle version 2.10 is required. Current version is 2.8. If u
Warning:Gradle version 2.10 is required. Current version is 2.8. If using the gradle wrapper, try ed ...