Nullsoft 脚本安装系统(英语:Nullsoft Scriptable Install System,缩写:NSIS)为一个开放源代码脚本驱动的封装安装工具。可以用其脚本语言自定义安装的流程,同时支援多种语系的安装接口。
Nullsoft是一个美国的软件设计团队,以Windows操作系统的应用软件开发为主,著名的产品有Winamp、NSIS、Gnutella与WASTE等,其创新性皆是同类别软件中的先驱之一。
Nullsoft成立于1997年,创办人为贾斯汀•法兰科(Justin Frankel)。同年推出Winamp后一战成名,Winamp成为最受欢迎的MP3歌曲播放软件之一。1999年6月1日Nullsoft为美国线上(AOL)所购并,成为AOL旗下的子公司。2000年初以自由版权GPL推出档案分享网络Gnutella,是点对点传输软件的先锋,Gnutella网络后来广为其他档案分享软件所采用,市场占有率高达40%左右。Nullsoft另一个著名的软件为NSIS安装程式。NSIS原为Winamp的安装引导而设计,后来Nullsoft把它独立出来并同样以自由版权GPL推出。由于易学易用且功能强大,因此很快地被许多软件设计师采用,目前有大量的软件都是以NSIS所制作的安装程式来引导安装。随着AOL的组织调整,Nullsoft现在为AOL Music下的一个部门。
据说“Nullsoft”的命名是为模仿“Microsoft”(微软)而来的,以“Null”(无)来对应“Micro”(微)。Nullsoft的代表性标志与吉祥物是称为“Mike the Llama”(也称为“DJ Mike Llama”)的大羊驼,创意来自于Winamp早期版本中附带的一段音讯:“Winamp, it really whips the llama's ass!”。
在用户使用你的应用程序之前首先会体验到你的安装程序。慢慢悠悠的或不成功的软件安装是很恼人的问题。一个快速友好的安装程序是展示你的软件产品品质的一部分。
NSIS (Nullsoft Scriptable Install System)允许程序员来创建这样的安装程序。它发布于一个开源的协议并且对于任何使用者来说都是完全免费的。
NSIS 创建的安装程序能够安装、卸载、设置系统设置、解压文件等等。因为它基于脚本文件,你可以完全的控制安装程序的每一部分。脚本语言支持变量、函数、字串操作,就像一个普通的程序语言一样 -但是设计来创建安装程序。即使有那么多的特性,NSIS 仍然是最小的安装程序系统。在默认选项下,它仅增加了 34 KB的开销。
很小的额外开销
NSIS 具有体积小、速度快和高效率的特点。当其它安装程序动辄需要几百 KB 或好几 MB 的安装程序数据,而一个具有完整功能的 NSIS 安装程序仅占用了 34 KB 的额外开销。
兼容性
你可以创建兼容于 Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP 和 Windows Server 2003 的安装程序。
独特的压缩方法
你可以在这三种 (ZLib, BZip2, LZMA) 完整的压缩方法中选择其一。新的 LZMA 压缩具有比其它通用压缩方法更好的效果。而且你不需要大块的外壳释放文档模块或其它的应用程序。该压缩方式已经包含在那 34 KB 的额外开销里。
基于脚本
不像其它的安装系统仅能基于文件列表和注册表操作来创建安装程序,NSIS 有一个强大的脚本语言。该脚本语言设计来专门制作安装程序并有可以帮助你执行任何安装任务的命令。你可以很容易的添加自定义逻辑和处理不同的升级、版本检测等。
在一个安装程序里支持多语言
一个安装程序可以支持多语言界面。本身已经包含超过 40 种翻译,但是你也可以创建你自己的语言文件。RTL(从右至左)语言比如阿拉伯语和希伯来语也得到完整的支持。
许多特性和对目标系统的检测
脚本语言提供的命令使你可以在目标系统上使用。从简单的功能比如创建文件夹和注册表编辑到文本、二进制文件修改,修改环境变量和重启系统。使用提供的插件你甚至可以使用 Windows API。
自定义对话和界面
你可以创建自定义的向导页面来获取用户的输入或结合配置选项。NSIS 包含了一个典型界面和新式向导界面,但是你也可以创建自己的界面。
插件系统
NSIS 可以由能和安装程序对话的插件来扩展。他们可以由 C、C++、Delphi 或其他语言并且可以用来执行安装任务或扩展安装程序界面。使用这些插件你只需要一行代码。插件也可以像其它安装数据一样被压缩并且仅在你使用它们的功能的时候被包含进来。
支持网络安装,给文件打补丁
NSIS 的发行包含了一系列插件使你可以从因特网下载文件、连接因特网、对存在的文件打补丁等。
方案综合、不同的发布和自动建立
NSIS 编译器有强大的预处理器。这使你很容易的整合多个方案到单个安装程序或自动的产生安装程序构造。你也可以产生不同的版本比如精简版和完全版。
容易且人性化的易读文件格式
NSIS 脚本格式和用于界面对话的格式是容易的、人性化的且易读的,所以你可以使用你喜欢的编辑器来编辑你的文件。
循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。
CRC 与数据完整性
尽管在错误检测中非常有用,CRC并不能可靠地校验数据完整性(即数据没有发生任何变化),这是因为 CRC多项式是线性结构,可以非常容易地故意改变量据而维持 CRC不变,参见CRC and how to Reverse it中的证明。我们可以用 Message authentication code校验数据完整性。
校验和(英语:Checksum)是冗余校验的一种形式。它是通过错误检测方法,对经过空间(如通信)或者时间(如计算机存储)传送的数据的完整性进行检查的一种简单方法。
计算机领域常见的校验和的方法有:
循环冗余校验
MD5
SHA家族