NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序

nsis

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

编辑本段简介

NSIS (Nullsoft Scriptable Install System) 是一个专业开源的制作 windows 安装程序的工具。 [1]

编辑本段特点

—开销小,一个完整功能的安装程序仅需要 34k 的额外开销。
—支持大多数 Windows 平台,包括:Windows 9.x,Windows NT,Windows 2000,Windows XP,Windows 2003
—支持三大压缩算法:ZLib,BZip2, LZMA
—支持 脚本
—支持多语言
—支持安装界面定制
—提供可扩展的 插件接口
—支持网络安装、 补丁
—支持无人值守的安装模式
—此外,NSIS的license允许任何用途免费使用。

编辑本段脚本结构

(下称 nsi 脚本)主要包含安装程序属性、页面、区段、函数。
属性用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。
页面是指安装程序的向导页面。
示例:
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
区段是对应某种安装/ 卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。
卸载程序的区段名用"un."作 为前缀。
示例:
Section "Installer Section"
SectionEnd
Section "un.Uninstaller Section"
SectionEnd
在区段中可以使用很多指令用来完成诸如 解压缩文件、读写注册表、创建目录、创建 快捷方式等任务。
但最常用的指令是 SetOutPath 和 File。前者用于指定目的位置,后者用于指定文件。
示例:
Section "My Program"
SetOutPath $INSTDIR
File "My Program.exe"
File "Readme.txt"
SectionEnd
区段名的修饰符“/o”表示该区段默认不选上,“-”表示隐藏区段(匿名区段也是隐藏区段),“!”表
示需要粗体显示的区段。
SectionIn 表示该区段和安装类型之间的关系:
SectionIn insttype_index [RO]
RO 修饰符表示不可修改。
子区段用于包含多个区段:
SubSection [/e] Caption [subsection_name index output]
修饰符“/e”用于该子区段的所有区段是否默认展开。
函数包含了模块化的安装逻辑,在 nsi 脚本中函数分为两种: 用户自定义函数回调函数
用户自定义函数仅当是 Call 指令调用时才被执行。
如果函数体中没有abort语句,则安装程序执行完了 用户自定义函数,继续运行 Call 语句和指令。
用户自定义函数的语法如下:
Function <函数名>
# some commands
FunctionEnd
函数的调用则使用以下语法:
Call <函数名>
可见无论是函数的定义还是函数的调用都没有 参数传递
通常 nsi 的 参数传递是通过 堆栈操作 Pop,Push 和 20 个 寄存器变量 $0~$9、$R0~$R9 进行的。
也可以通过 全局变量完成 参数传递
如:
Var input ;
Var output ;
Section bla
DeteailPrint "input is $input$\n"
Call square
DeteailPrint "square of $input is $output$\n"
SectionEnd
Function square
output = input^2
FunctionEnd
回调函数则是由在特定的时间点触发的 程序段。常用的 回调函数如 .onInit:
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 对于 卸载逻辑定义以下 回调函数
un.onGUIInit
un.onInit
un.onUninstFailed
un.onUninstSuccess
un.onGUIEnd
un.onRebootFailed
un.onUserAbort

编辑本段指令

nsi 脚本编译器指令主要指仅在编译时刻执行的命令。
这些命令主要用来包含文件、条件化编译、定义 常量、定义宏等。
定义常量和宏是 编译器指令最主要应用。
定义常量的示例:
!define VERSION "1.0.3"
Name "My Program $"
OutFile "My Program Installer - $.exe"
定义宏的示例:
!macro MyFunc UN
Function $MyFunc
Call $DoRegStuff
ReadRegStr HKLM Software\MyProgram key
DetailPrint
FunctionEnd

编辑本段程序安装

—确定安装的功能和界面元素
—编写 NSIS 脚本
—使用 NSIS 提供的 makensis 或者 makensisw 程序,将步骤 2 编写的 脚本编译成可执行的安装程序
—调试安装程序,如果有问题退到第二步重复
—随着 NSIS 的流行,有一些第三方的 NSIS 脚本开发环境出现了,如 HMNISEdit,Venis IX。
前者是完全开源的,后者仅对个人和非商业用途免费。在这些 集成开发环境下,步骤2,3可以方便的组合在一起。

编辑本段变量定义

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。

编辑本段Modern UI

Modern UI 是感观上模仿最新的 Windows 系统的界面风格,它由欢迎页面、结束页面和其他向导页面构成。

编辑本段历史版本

v2.45 2012.10.01
1、集成了网络上能够收集到的所有插件及应用示例;
2、集成了 VNISEdit v2.03 简体中文版 和 NotePad2 v3.1 简体中文版两个脚本编辑器,并能方便地切换;
3、集成了NSIS 文件夹压缩器、Resource Hacker、Zip2Exe、Ini2Nsi等实用工具;
4、附带了 NSIS用户手册和 NSIS图文教程集锦。 [2]

编辑本段插件

nsi 支持 插件,通过插件可以方便的扩展 NSIS 安装程序的功能。
NSIS 插件是用 C++、Delphi 等语言编写的 dll,在 nsi 脚本中调用 nsi 中的函数使用如下语法:
DLLName::FunctionName "参数1" "参数2" "参数3"

示例1

nsExec::ExecToLog '"$\makensis.exe" /CMDHELP'
执行makensis.exe命令,显示该命令用法。

示例2

InstallOptions::dialog "$PLUGINSDIR\test.ini"
显示对话框

编辑本段插件策略

默认情况下 NSIS 在其 安装目录的子目录 Plugins 中搜索 插件,用户可以使用 !addplugindir 指定增加插件的目录位置。

编辑本段基本语法

注释

单行注释用 井号“#”或分号“;”,跨行注释用可以用“C/C++”中注释语法。
9.2 数据类型

数字

数字 常量可以用十进制、十六进制(0x为前缀)、 八进制(0为前缀)表示。
颜色用类似 HTML 的中 RGB 表示法,但去  井号“#”。

字符串

字符串常量可以用引号引用,转意字符用"$\"作前缀。
美元符号、常用转意 字符换行、回车、 制表符的nsi语法表示分别为:$$,$\n,$\r,$\t

续行符

nsi 脚本用行尾的反斜杠“\”表示下一行和当前行逻辑上是同一行。

默认头文件

如果在makensis同目录下有nsisconf.nsh文件,该文件会被自动包含,除非编译时指定/NOCONFIG选项。

标号

nsi 使用 GOTO 语句和 IfErrors、MessageBox、IfFileExists 及 StrCmp 进行程序控制流表示,标号是这些语句的目标语句。
标号定义的语法:标号:语句
标号必须定义在函数和区段中,其作用范围仅限于定义它的区段或函数。以点号“.”开头的标号是全局标号。

相对跳转

nsi 脚本常常使用相对跳转表示条件分枝,其语法是 [+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。
数字表示跳转的语句条数。
示例:
Goto +4
MessageBox MB_OK "The following message will be skipped"
Goto +3
MessageBox MB_OK "You will never ever see this message box"
Goto -3
MessageBox MB_OK "Done"

编辑本段页面

向导页面是 NSIS 安装程序中最重要的界面元素,在 nsi 脚本中可以使用 NSIS 内置页面或者定制界面,通过脚本可以指定页面的顺序、显示样子和行为。 Page指令用来定义安装程序中的页面,UninstPage用来定义,此外PageEx指令提供类是功能,但提供更多选项。页面的顺序和它在nsi 脚本中出现的次序一致。
示例:
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
规定安装程序首先显示license页面,然后显示components选择页面,接着显示 安装目录选择页面。 10.1 页面选项
不同的页面有不同的选项:
License page 有 LicenseText、LicenseData、LicenseForceSelection;
Components selection 页面有 ComponentText;
Directory selection 页面有 DirText、DirVar (仅能在 PageEx 中使用)、DirVerify;
Un/Installation log 页面有 DetailsButtonText、CompletedText;
Uninstall confirmation 页面有 DirVar (仅能在 PageEx 中使用)、UninstallText。
对于内置的 Page,NSIS 支持三个 回调函数用于定制界面和验证,对于自定义页面 NSIS 支持两个回调函数。
Page 指令语法:
Page license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
或者:
Page custom [creator_function] [leave_function] [caption]
示例:
Page license skipLicense "" stayInLicense
Page custom customPage "" ": custom page"
Page instfiles
Function skipLicense
MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no
Abort
no:
FunctionEnd
Function stayInLicense
MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no
Abort
no:
FunctionEnd
Function customPage
File /oname=$R0 customPage.ini
InstallOptions::dialog $R0
Pop $R1
StrCmp $R1 "cancel" done
StrCmp $R1 "back" done
StrCmp $R1 "success" done
error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions error:$\r$\n$R1"
done:
FunctionEnd
UninstPage 指令语法
UninstPage custom [creator_function] [leave_function] [caption]
UninstPage (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
PageEx 语法
PageEx 使用嵌套结构,比如:
PageEx license
LicenseText "Readme"
LicenseData readme.rtf
PageCallbacks licensePre licenseShow licenseLeave
PageExEnd

编辑本段常用指令

nsi 大致可以分为基本指令、注册表及 ini 操作指令、通用指令、 流程控制指令、文件操作指令、 卸载指令、 字符串处理指令、多语言支持指令、重启指令。
以下是常用的基本指令:
(1) Delete
Delete [/REBOOTOK] file
(2) Exec
Exec command
(3) ExecShell
ExecShell action command [parameters] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]ExecShell "open"
ExecWait
ExecWait command
示例:
ExecWait '"$INSTDIR\someprogram.exe"'
ExecWait '"$INSTDIR\someprogram.exe"'
DetailPrint "some program returned "
(4) File
File [/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)
/r选项用作递归模式,/x用于排出文件
示例:
File something.exe
File /a something.exe
File *.exe
File /r *.dat
File /r data
File /oname=$TEMP\temp.dat somefile.ext
File /nonfatal "a file that might not exist"
File /r /x CVS myproject
File /r /x *.res /x *.obj /x *.pch source
(5) Rename
Rename [/REBOOTOK] source_file dest_file
(6) RMDir
RMDir [/r] [/REBOOTOK] directory_name

编辑本段解决方法

首先你先将你的 一键还原,也就是备份系统删除,这个可以准确的说!已经没用了,若是没有的也算了
然后你肯定有重装系统盘吧,在重装盘进入 安全系统进行格式化C盘。
格式化后重启,再用你重装盘工具将硬盘分为四个分区,这样重装下系统就可以成功了!这是个最简单的方法,也是最可靠的,分区后就意味着你电脑所有东西都没了。
参考资料
开放分类:
编程软件 安装包 打包程序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作 TVSU(TV Series Updater)的安装程序,您可以按照以下步骤进行操作: 1. 准备所需的文件和资源: - TVSU 应用程序的可执行文件。 - 所有依赖项和库文件。 - 图标和其他资源文件(可选)。 - 安装过程中所需的任何其他文件。 2. 选择一个安装程序制作工具: - Inno Setup:这是一个免费且功能强大的安装程序制作工具。 - NSISNullsoft Scriptable Install System):这是另一个流行的开源安装程序制作工具。 3. 创建一个安装脚本: - 对于 Inno Setup,您需要创建一个脚本文件(通常以 .iss 扩展名结尾),其中包含安装程序的详细信息和配置选项。您可以使用 Inno Setup 提供的文档和示例来编写脚本。 - 对于 NSIS,您需要创建一个脚本文件(通常以 .nsi 扩展名结尾),其中包含安装程序的详细信息和配置选项。您可以使用 NSIS 提供的文档和示例来编写脚本。 4. 配置安装程序: - 在安装脚本中,您可以设置安装程序的标题、版本号、安装目录、许可协议、安装选项等。 - 您还可以定义需要安装的文件、目录结构、注册表项、快捷方式等。 5. 编译和生成安装程序: - 使用所选的安装程序制作工具,将安装脚本编译为可执行的安装程序。 - 运行编译器,并指定安装脚本文件作为输入。编译器将生成一个可执行的安装程序文件(通常以 .exe 扩展名结尾)。 6. 测试和部署: - 运行生成的安装程序,确保它能够正确地安装和配置 TVSU 应用程序。 - 将生成的安装程序分发给用户,以便他们可以下载和安装 TVSU。 请注意,以上步骤仅提供了一个大致的概述,具体的步骤和工具可能因您使用的安装程序制作工具而有所不同。您可以根据您的需求和工具的文档进行详细的设置和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值