NSIS
锦囊 更多
- NSIS的教程 2021-03-30
- 提升Git体验:探索Gitui——高效的终端UI工具 2024-01-05
- Stirling PDF - 强大的本地 PDF 管理工具 2024-01-05
资讯 更多
- NSIS v3.04 官方版更新 2019-02-21
- 微信Mac插件——微信小助手,是一款功能强大的插件 2024-01-08
- 完美解码:打造顶级视听盛宴的终极使用指南 2024-01-06
简介
NSIS(Nullsoft Scriptable Install System)是一个专业开源的制作windows安装程序的工具。
特点
1、开销小,一个完整功能的安装程序仅需要34k的额外开销。
2、支持大多数Windows平台,包括:Windows9.x,WindowsNT,Windows2000,WindowsXP,Windows2003
3、支持三大压缩算法:ZLib,BZip2,LZMA
4、支持脚本
5、支持多语言
6、支持安装界面定制
7、提供可扩展的插件接口
8、支持网络安装、补丁
9、支持无人值守的安装模式
10、此外,NSIS的license允许任何用途免费使用。
脚本结构
(下称nsi脚本)主要包含安装程序属性、页面、区段、函数。
属性用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。
页面是指安装程序的向导页面。
示例:
Page license
Page components
Page directory
Page instfiles
Uninst Pageuninst Confirm
Uninst Pageinstfiles
区段是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。
卸载程序的区段名用"un."作为前缀。
示例:
Section"Installer Section"
Section End
Section"un.Uninstaller Section"
Section End
在区段中可以使用很多指令用来完成诸如解压缩文件、读写注册表、创建目录、创建快捷方式等任务。
但最常用的指令是Set Out Path和File。前者用于指定目的位置,后者用于指定文件。
示例:
Section"My Program"
Set Out Path$INSTDIR
File"My Program.exe"
File"Readme.txt"
Section End
区段名的修饰符“/o”表示该区段默认不选上,“-”表示隐藏区段(匿名区段也是隐藏区段),“!”表
示需要粗体显示的区段。
Section In表示该区段和安装类型之间的关系:Section In insttype_index[RO]
RO修饰符表示不可修改。
子区段用于包含多个区段:
Sub Section[/e]Caption[subsection_name in dex output]
修饰符“/e”用于该子区段的所有区段是否默认展开。
函数包含了模块化的安装逻辑,在nsi脚本中函数分为两种:用户自定义函数和回调函数。
用户自定义函数仅当是Call指令调用时才被执行。
如果函数体中没有abort语句,则安装程序执行完了用户自定义函数,继续运行Call语句和指令。
用户自定义函数的语法如下:
Function<函数名>
#some commands
Function End
函数的调用则使用以下语法:
Call<函数名>
可见无论是函数的定义还是函数的调用都没有参数传递。
通常nsi的参数传递是通过堆栈操作Pop,Push和20个寄存器变量$0~$9、$R0~$R9进行的。
也可以通过全局变量完成参数传递。
如:
Varinput;
Varoutput;
Sectionbla
DeteailPrint"inputis$input$\n"
Call square
Deteail Print"square of$inputis$output$\n"
Section End
Function square
output=input^2
Function End
回调函数则是由在特定的时间点触发的程序段。常用的回调函数如.onInit:
Function.onInit
Message Box MB_YESNO"This will install My Program.Do you wish to continue?"IDYESgogogo
Abort
gogogo:
Function End
NSIS对于安装逻辑定义以下回调函数:
.onGUIInit
.onInit
.onInst Failed
.onInst Success
.onGUI End
.on Mouse Over Section
.on Reboot Failed
.on Sel Change
.on User Abort
.on Verify InstDir
NSIS对于卸载逻辑定义以下回调函数:
un.onGUIInit
un.onInit
un.on Uninst Failed
un.on Uninst Success
un.on GUI End
un.onReboot Failed
un.on User Abort
版本
v2.452012.10.01
1、集成了网络上能够收集到的所有插件及应用示例;
2、集成了VNISEditv2.03简体中文版和Note Pad2v3.1简体中文版两个脚本编辑器,并能方便地切换;
3、集成了NSIS文件夹压缩器、ResourceHacker、Zip2Exe、Ini2Nsi等实用工具;
4、附带了NSIS用户手册和NSIS图文教程集锦。
安装
1、确定安装的功能和界面元素
2、编写NSIS脚本
3、使用NSIS提供的makensis或者makensisw程序,将步骤2编写的脚本编译成可执行的安装程序
4、调试安装程序,如果有问题退到第二步重复
5、随着NSIS的流行,有一些第三方的NSIS脚本开发环境出现了,如HMNISEdit,VenisIX。
前者是完全开源的,后者仅对个人和非商业用途免费。在这些集成开发环境下,步骤2,3可以方便的组合在一起。
指令
nsi脚本的编译器指令主要指仅在编译时刻执行的命令。
这些命令主要用来包含文件、条件化编译、定义常量、定义宏等。
定义常量和宏是编译器指令最主要应用。
定义常量的示例:
!defineVERSION"1.0.3"
Name"My Program$"
OutFile"My Program Installer-$.exe"
定义宏的示例:
!macro My FuncUN
Function$My Func
Call$DoReg Stuff
Read Reg StrHKLMSoftware\My Programkey
Detai lPrint
Function End
语法解说
注释
单行注释用井号“#”或分号“;”,跨行注释用可以用“C/C++”中注释语法。
9.2数据类型
数字
数字常量可以用十进制、十六进制(0x为前缀)、八进制(0为前缀)表示。
颜色用类似HTML的中RGB表示法,但去井号“#”。
字符串
字符串常量可以用引号引用,转意字符用"$\"作前缀。
美元符号、常用转意字符换行、回车、制表符的nsi语法表示分别为:$$,$\n,$\r,$\t
续行符
nsi脚本用行尾的反斜杠“\”表示下一行和当前行逻辑上是同一行。
默认文件
如果在makensis同目录下有nsisconf.nsh文件,该文件会被自动包含,除非编译时指定/NOCONFIG选项。
标号
nsi使用GOTO语句和IfErrors、Message Box、If Fil eExists及StrCmp进行程序控制流表示,标号是这些语句的目标语句。
标号定义的语法:标号:语句
标号必须定义在函数和区段中,其作用范围仅限于定义它的区段或函数。以点号“.”开头的标号是全局标号。
相对跳转
nsi 脚本常常使用相对跳转表示条件分枝,其语法是 [+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。
数字表示跳转的语句条数。
示例:
Goto+4
Message BoxMB_OK"The following message will be skipped"
Goto+3
Message BoxMB_OK"You will never ever see this message box"
Goto-3
Message BoxMB_OK"Done"
变量定义
nsi脚本的变量定义用Var关键字,后跟变量名,变量是全局的并且是大小写不敏感的。变量引用时需要加上前缀“$”。
除了用户自定义的变量外,nsi脚本中与定义寄存器变量$0~$9、$R0~$R9用于参数传递,以及系统变量用于特定用途。
这些变量主要有:
$INSTDIR,$OUTDIR,$CMDLINE,$LANGUAGE这些变量都是可写的。
$PROGRAMFILES,$COMMONFILES,$DESKTOP,$EXEDIR,$WINDIR,$SYSDIR,$TEMP,$STARTMENU
$SMPROGRAMS,$SMSTARTUP,$QUICKLAUNCH,$DOCUMENTS,$SENDTO,$RECENT,$FAVORITES
$MUSIC,$PICTURES,$VIDEOS,$NETHOOD,$FONTS,$TEMPLATES,$APPDATA,$PRINTHOOD
$INTERNET_CACHE,$COOKIES,$HISTORY,$PROFILE,$ADMINTOOLS,$RESOURCES
$RESOURCES_LOCALIZED,$CDBURN_AREA,$HWNDPARENT,$PLUGINSDIR。
nsi脚本中可用于调试的系统函数有MessageBoxes、DetailPrint、Dumpstate。
ModernUI
ModernUI是感观上模仿最新的Windows系统的界面风格,它由欢迎页面、结束页面和其他向导页面构成。
页面
向导页面是NSIS安装程序中最重要的界面元素,在nsi脚本中可以使用NSIS内置页面或者定制界面,通过脚本可以指定页面的顺序、显示样子和行为。Page指令用来定义安装程序中的页面,UninstPage用来定义,此外PageEx指令提供类是功能,但提供更多选项。页面的顺序和它在nsi脚本中出现的次序一致。
示例:
Page license
Page components
Page directory
Page instfiles
Uninst Pageuninst Confirm
Uninst Pageinstfiles
规定安装程序首先显示license页面,然后显示components选择页面,接着显示安装目录选择页面。10.1页面选项
不同的页面有不同的选项:
Licensepage有LicenseText、License Data、License Force Selection;
Components selection页面有Component Text;
Directory selection页面有DirText、DirVar(仅能在PageEx中使用)、DirVerify;
Un/Installation log页面有Details ButtonText、Completed Text;
Uninstall confirmation页面有DirVar(仅能在PageEx中使用)、UninstallText。
对于内置的Page,NSIS支持三个回调函数用于定制界面和验证,对于自定义页面NSIS支持两个回调函数。
Page指令语法:
Page license|components|directory|instfiles|uninst Confirm)[pre_function][show_function][leave_function]
或者:
Page custom[creator_function][leave_function][caption]
示例:
Page license skip License""stayInLicense
Page customcus tomPage""":custompage"
Page instfiles
Function skip License
MessageBoxMB_YESNO"Do you want to skip the license page?"IDNOno
Abort
no:
Function End
Function stay In License
MessageBoxMB_YESNO"Do you want to stay in the license page?"IDNOno
Abort
no:
Function End
Function custom Page
Get Temp File Name$R0
File/oname=$R0custom Page.ini
Install Options::dialog$R0
Pop$R1
StrCmp$R1"cancel"done
StrCmp$R1"back"done
StrCmp$R1"success"done
error:Message BoxMB_OK|MB_ICONSTOP"Install Optionserror:$\r$\n$R1"
done:
Function End
Uninst Page指令语法
Uninst Pagecustom[creator_function][leave_function][caption]
或
UninstPage(license|components|directory|instfiles|uninstConfirm)[pre_function][show_function][leave_function]
Page Ex语法
Page Ex使用嵌套结构,比如:
Page Exlicense
License Text "Readme"
License Data readme.rtf
Page Callback slicense Prelicense Show licenseLeave
Page ExEnd
常用指令
nsi大致可以分为基本指令、注册表及ini操作指令、通用指令、流程控制指令、文件操作指令、卸载指令、字符串处理指令、多语言支持指令、重启指令。
以下是常用的基本指令:
(1)Delete
Delete[/REBOOTOK]file
(2)Exec
Execcommand
(3)ExecShell
Exec Shellaction command[parameters][SW_SHOWNORMAL|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_HIDE]ExecShell"open"
Exec Wait
Exec Waitcommand
示例:
ExecWait'"$INSTDIR\someprogram.exe"'
Detail Print"some program returned"
(4)File
File[/nonfatal][/a]([/r][/xfile|wildcard[...]](file|wildcard)[...]|/oname=file.datinfile.dat)
/r选项用作递归模式,/x用于排出文件
示例:
Filesomething.exe
File/asomething.exe
File*.exe
File/r*.dat
File/rdata
File/oname=$TEMP\temp.datsomefile.ext
File/nonfatal"a file that might not exist"
File/r/xCVSmyproject
File/r/x*.res/x*.obj/x*.pchsource
(5)Rename
Rename[/REBOOTOK]source_filedest_file
(6)RMDir
RMDir[/r][/REBOOTOK]directory_name
解决方法
首先你先将你的一键还原,也就是备份系统删除,这个可以准确的说!已经没用了,若是没有的也算了
然后你肯定有重装系统盘吧,在重装盘进入安全系统进行格式化C盘。
格式化后重启,再用你重装盘工具将硬盘分为四个分区,这样重装下系统就可以成功了!这是个最简单的方法,也是最可靠的,分区后就意味着你电脑所有东西都没了。
插件
nsi支持插件,通过插件可以方便的扩展NSIS安装程序的功能。
NSIS插件是用C++、Delphi等语言编写的dll,在nsi脚本中调用nsi中的函数使用如下语法:
DLLName::FunctionName"参数1""参数2""参数3"
示例1
nsExec::ExecToLog'"$\makensis.exe"/CMDHELP'
执行makensis.exe命令,显示该命令用法。
示例2
Install Options::dialog"$PLUGINSDIR\test.ini"
显示对话框
插件策略
默认情况下NSIS在其安装目录的子目录Plugins中搜索插件,用户可以使用!add plugin dir指定增加插件的目录位置。
版本列表
-
-
NSIS v3.04 官方版
NSIS(Nullsoft Scriptable Install System)是一 ...
软件大小:1.45 MB 更新时间:2019-02-21