`
gkuiyj
  • 浏览: 90755 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NSIS安装脚本简明教程

阅读更多



本教程环境NSIS2.16

我们按脚本结构依此讲说,因本人亦属初学,有不到之处敬请批评指正!

介绍

NSIS特别说明:

某些脚本需要额外的DLL支持,如MPC关联程序,就有可能需要InstallOptionsEx.dll,
另外,可能需要编译语言头文件如:SimpChinese.nsh,可能需要把 !define 全部替换为 !insertmacro MUI_DEFAULT,别的语言以此类推!还有一些大家需要自己在制作过程中去摸索!在此就不一一指出.


脚本结构:

安装程序属性-页面-区段-安装程序的卸载部分(这只是个大体结构,中间可以包含"变量""函数".....)

安装程序属性部分:
;--------------------------------------
Name                 "这里定义你的程序名字"

SetCompressor        "[/SOLID] [/FINAL] zlib|bzip2|lzma"
*该命令设置由安装程序使用来决定数据是否应该被压缩的压缩标记*

CRCCheck             "on|off|force"
*指定安装前安装程序是否对自身执行一个 CRC*

InstallColors        "/windows | (前景色 背景色)"
*设置安装信息屏幕颜色(默认为 00FF00 000000)*

AutoCloseWindow      "true|false"
*设置当安装完成的时候窗口是否自动关闭*

ShowInstDetails      "hide|show|nevershow"
*设置是否显示安装详细信息*

SilentInstall        "normal|silent|silentlog"
*指定安装程序是否静默安装*

BrandingText         "/TRIM(LEFT|RIGHT|CENTER) 文本"
*设置显示在安装程序窗口底部的文本*

SpaceTexts           "{需要空间文本 [可用空间文本]}"
*如果指定了参数,将会取代安装所需空间和可用空间文本*

Caption              "标题"
*当使用一个外部的 PageEx 区块:设置安装程序标题条文本*

SubCaption          "[页面代号子标题] "
*取代每一个安装程序页面(0=": 许可协议",1=": 安装选项",2=": 安装目录", 3=": 正在安装", 4=": 安装完成")的子标题。如果指定了空字串(""),将使用默认值(你也可以指定 " " 来使用一个空白字串)*

InstallButtonText    "安装按钮文本"

ComponentText        "[文本 [子文本] [子文本2]]"
*/用来更改组件选择页面的默认文本

文本: 控件上的文本,到安装图标的右边

子文本: 安装类型选择控件的文本

子文本2: 安装类型选择控件下面、组件列表左边的文本

如果字串为空("")则使用默认文本/*



OutFile              "[路径\]安装程序.exe"

!include "文件"(例如:!include "MUI.nsh")MUI是一个以定义的UI界面头文件.
*这个命令可以将一个文件包含到脚本中,就像是脚本的一部分一样*

; --------------------------------------

页面部分:

如果你使用了"!include "MUI.nsh"那么请按它的方式定义;
!define MUI_ICON ".\你要使用的图标"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
  !define MUI_HEADERIMAGE_BITMAP .\选择150*57像数的图片(必须是BMP格式)
...........具体内容,请打开MUI.nsh查看;
;-----------------------------------------------------
如果没有,那么
Page license            许可协议页面
Page components         组件选择页面
Page directory          安装目录选择页面
Page instfiles          安装执行页面
UninstPage uninstConfirm 卸载确认页面
UninstPage instfiles     取消安装

InstallDir 定义安装目录
InstallDirRegKey HKLM Software\??? "" 
;-----------------------------------------
区段部分:
在说明之前,我先行说明"InstType",InstType定义:
把一个安装类型添加到安装类型列表里,或禁止自定义安装类型;
例子:
InstType "推荐安装"
InstType "全部安装"
默认有"自定义安装",当然你可以禁止它!

看看区段部分吧;
Section
...............
Sectionend
上面就是一个区段,不过是个空区段!
我们再来看个例子:
;-----------------------
InstType "推荐安装"
InstType "全部安装"

Section "区段 1"
SectionIn 2
SectionEnd

Section "区段 2"
SectionIn 1 2
SectionEnd
;----------------------
不知道大家看出没,此例是想告诉我们当我们选择"推荐安装"时,我们只安装了"区段2"中的内容,当我们选择"全部安装"时,我们安装了"区段1"及"区段2"的内容.

如果我们需要一个段中含有安装选项时,我们需要使用到"区段组"
SectionGroup [/e] 区段组名 [区段组名索引输出]  *如果指定了 /e,该区段组的所有区段默认将被展开*
例子:
;--------------------------------
SectionGroup "区段组"
Section "区段 1"
SectionEnd
Section "区段 2"
SectionEnd
SectionGroupEnd
;--------------------------------

安装程序的卸载部分说明:
;-------------------------------
; Uninstaller
Section "Uninstall"
SectionEnd
;-------------------------------
上面就是卸载区段了!

看了上面的简介,我们可以基本上写上一点了,虽然什么也没执行,但框架有了.不是吗?

************************************************************************
常用的命令及函数(大部分用于区段)

1:file [/nonfatal] [/a] ([/r] [/x 文件|通配符 [...]] (文件|通配符) [...] | /oname=输出路径\文件名 输入路径\文件名)
              释放文件到当前输出路径.
如果使用了 /nonfatal 开关且当文件未找到时使用警告来代替错误
如果使用了 /a 开关,则被添加的文件的属性将会保持
如果使用了 /r 开关,匹配的文件将会在子目录里被递归的搜索。如果目录名匹配则所有包含的内容都会被递归添加。目录结构也会被保持
使用 /x 开关可以用来来排除文件或目录

相对应卸载段命令:
Delete  [/REBOOTOK] 文件
从目标系统删除文件


2:WriteRegStr 根键 子键 项 值

把字串写入注册表.

WriteRegExpandStr 根键 子键 项 值

把字串写入注册表。根键必须为下面列表之一:
HKCR 或 HKEY_CLASSES_ROOT
HKLM 或HKEY_LOCAL_MACHINE
HKCU 或HKEY_CURRENT_USER
HKU  或HKEY_USERS
HKCC 或HKEY_CURRENT_CONFIG
HKDD 或HKEY_DYN_DATA
HKPD 或HKEY_PERFORMANCE_DATA
SHCTX 或SHELL_CONTEXT
如果字串不能写入注册表则放置一个错误的标记。字串的类型为 REG_SZ 对应 WriteRegStr,或 REG_EXPAND_STR 对应 WriteRegExpandStr。如果注册表键不存在则会自动创建。


相对应卸载段命令:
DeleteRegKey [/ifempty] 根键 子键
删除一个注册表键。如果指定了 /ifempty,则该注册表键仅当它无子键时才会被删除(否则,整个注册表键将被删除)。有效的根键值在后面的 WriteRegStr 列出。如果该键不能被删除(或如果它不存在)则会放置一个错误的标记。


3: SetOutPath 输出路径

设置输出路径($OUTDIR)且当路径不存在时创建(需要时会递归创建)。必须为全路径名,通常都使用 $INSTDIR。

其实说白了就像DOS里的"建立一个目录"的命令.

如:
SetOutPath $INSTDIR
??这个到底是个什么目录?按照英文意思"安装目录"其实这个变量对应前面我们的定义
"InstallDir $PROGRAMFILES\QUHAIL"那么这就是我们的目录了!
对应卸载命令:
RMDir 要删除的目录

4:CreateDirectory 要创建的路径
创建 (递归创建) 指定的目录。当目录不能创建时会放置一个错误标记。

你也可以指定一个绝对路径。
CreateShortCut
快捷文件.lnk 目标文件 [参数 [图标文件 [图标索引号 [启动选项 [键盘快捷键 [描述]]]]]]

创建一个指向 “目标文件” 的快捷方式 “快捷文件.lnk”,可以带 “参数” 参数.
就是创建快捷方式

对应卸载命令:
Delete

5:RegDLL DLL文件 [入口点名称]
载入指定的 DLL 并且调用 DllRegisterServer (或入口点名称,当指定之后)。当产生一个错误的时候会置一个错误标记(例如不能载入 DLL,不能初始化 OLE,不能找到入口点,或者函数返回任何其它错误 ERROR_SUCCESS (=0)).

其实就是注册或加载你要的插件!
如:RegDLL $INSTDIR\Codecs\h264dec.ax
对应的卸载命令
UnRegDLL

6:Exec 命令
这应该算是常用的命令了,执行一个指定的程序并且立即继续安装,就是直接执行一个程序.
ExecWait 命令 [用户变量(返回代码)]
执行一个指定的程序并且等待运行处理结束.
如:运行一个安装文件 .inf
ExecWait "RunDll32 advpack.dll,LaunchINFSection skins.inf,DefaultInstall"
对应卸载
ExecWait "RunDll32 advpack.dll,LaunchINFSection $windir\INF\skins.inf,DefaultunInstall"
当然DefaultunInstall是不定的,具体要看INF文件,它可以定义[unInstall]OR [DEL]或者别的,如果没有卸载段就无法卸载!

以上应该可以简单的做个安装包了吧!

7:ReadINIStr 用户变量(输出) INI文件 区段 项

从 “INI文件” 的 “区段” 区段读取 “项” 的值并把该值输出到用户变量。如果该项未找到时会放置一个错误标记且该用户变量被赋为空值。

对应卸载
DeleteINISec INI文件 区段
从“INI文件” 里删除整个区段 “区段”
DeleteINISec $TEMP\something.ini Field 2
DeleteINIStr INI文件 区段 字串
从“INI文件” 里的 “区段” 区段删除 “字串” 字串。
DeleteINIStr $TEMP\something.ini Field 2 A 组件安装

比如:something.INI
[Field 1]
Type=Label
Text=A 组件安装
Left=8
Right=68
Top=6
Bottom=13

[Field 2]
Type=Label
Text=B 组件安装
Left=5
Right=65
Top=44
Bottom=51


8:ReserveFile [/nonfatal] [/r] [/x file|wildcard [...]] 文件 [文件...]
把文件保存在稍后使用的数据区块.

用于下面的调用.
有时,预先打包文件,方便安装加速释放之用.
如:ReserveFile "a.ini"

9:Function [函数名]
开始并打开一个新的函数.
Function func
............
FunctionEnd
;----------------
在这个段中定义函数"func"


9:StrCpy 用户变量(目标) 字串 [最大长度] [起始偏移]
字串复制指令

StrCpy $0 "a bbbbbbbb"        就有$0 = "a bbbbbbbb"
StrCpy $0 "a bbbbbbbb" 3       就有$0 = "a b"
............

10:StrCmp 字串1 字串2 相同时跳转的标记 [不相同时跳转的标记]
比较(不区分大小写)“字串1”和“字串2”.如果两者相等,跳转到“相同时跳转的标记”,否则跳转到“不相同时跳转的标记”.

11:Exch [用户变量 | 堆栈索引]
当不指定参数时,交换堆栈顶部的两个单元
Push 字串
把一个字串压入堆栈。该字串可随后从堆栈里弹出
Pop 用户变量(输出)
从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的,则会置一个错误标记。
如:
Push 1
Push 2
Exch
Pop $0 # = 1

12:if
12-1 IfAbort 退出时要跳转的标记 [不是退出时要跳转的标记]
如果调用退出时它将返回 true
12-2 IfErrors 错误时跳转的标记 [没有错误时跳转的标记]
检测并清除错误标记,如果设了错误标记,则跳转到 “错误时跳转的标记”,否则跳转到 “没有错误时跳转的标记”.
12-3IfFileExists 要检测的文件 文件存在时跳转的标记 [文件不存在时跳转的标记]
检测“要检测的文件”是否存在(可以用通配符,或目录),并当文件存在时跳转到“文件存在时跳转”,否则跳转到“文件不存在时跳转”.

13Goto 要跳转的标记 | +偏移| -偏移| 用户变量(目标地址)
如果指定了标记,则跳转到 “要跳转的标记:”.

14  MessageBox 消息框选项列表消息框文本 [/SD 返回] [检测返回值 跳转到标记] [检测返回值2 跳转到标记2]
显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个,多个使用 | 来隔开.
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
“检测返回值”可以为 0(或空,或保留关闭),或下列之一:

IDABORT - 退出按钮
IDCANCEL - 取消按钮
IDIGNORE - 忽略按钮
IDNO - 否按钮
IDOK - OK 按钮
IDRETRY - 重试按钮
IDYES - 是按钮
如果消息框的返回值为“检测返回值”,则安装程序执行跳转.
如:
IfFileExists "$EXEDIR\mplayerc.exe" +3 0
  MessageBox MB_OK|MB_ICONEXCLAMATION "请放到MY MPC LOOKOU目录下运行         "
 


15:Rename [/REBOOTOK] 源文件 目标文件
把 源文件 重命名为 目标文件
如:
Rename $INSTDIR\file.ext $INSTDIR\file.dat
分享到:
评论

相关推荐

    NSIS安装软件脚本详细教程.pdf

    NSIS安装软件脚本详细教程

    NSIS安装包制作教程详细版

    NSIS安装脚本简明教程 取得winamp的NSIS脚本的教程 迅雷5.7.3.389 AYU增强版的安装脚本 NSIS制作迅雷安装的脚本 迅雷5.7.2.371 DDR1.5版去广告版源代码说明 NSIS删除安装程序自身 帮助文件中关于静默安装的...

    NSIS(Nullsoft 脚本安装系统)安装程序

    NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System) 的缩写,它是一个免费的 Win32 安装、卸载系统,采用了简洁高效的脚本方式。它本来是一个由 Nullsoft 创建并用于作为 Winamp 及其插件...

    为自己常用软件打包的NSIS安装脚本

    NSIS安装脚本的灵活性和可定制性非常高,可以实现从基本的文件复制到复杂的自定义逻辑,使得用户能够根据自己的需求定制安装过程。 在"为自己常用软件打包的NSIS安装脚本"这个项目中,作者显然是为了方便自己在重装...

    NSIS 安装脚本

    NSIS 安装脚本 经典

    NSIS 安装 脚本 学习 资料

    NSIS (Nullsoft Scriptable Install System)是一个Open ...NSIS的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。NSIS脚本通常以 nsi为扩展名,支持include功能,头文件扩展名为nsh

    nsis打包脚本

    它允许开发者使用简单的脚本语言(NSIS Scripting Language)来编写自定义的安装、卸载脚本,从而生成高度定制化的安装包。NSIS支持多种功能,包括文件复制、注册表操作、环境变量设置、自定义界面等,使其成为开发...

    NSIS脚本实例NSIS脚本实例

    NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例

    nsis安装打包软件

    NSIS基于脚本语言,允许开发者通过编写简单易懂的NSIS脚本来定义安装过程的每一个步骤。这些脚本可以包括文件复制、注册表操作、自定义用户界面元素等。NSIS还支持插件系统,提供了更多的功能扩展,例如文件压缩、...

    d打包工具里面包含了NSIS脚本安装系统.zip及托盘的脚本代码.zip

    这个压缩包“d打包工具里面包含了NSIS脚本安装系统.zip及托盘的脚本代码.zip”显然提供了使用NSIS制作安装程序的相关资源,包括NSIS脚本和可能用于创建系统托盘图标的脚本代码。 首先,NSIS脚本安装系统是基于文本...

    NSIS脚本安装系统.zip

    1. **NSIS安装器**:`nsis3.04setup.exe`是NSIS的安装程序,用于在你的开发环境中安装NSIS编译器和相关的支持工具。通过运行这个文件,你可以获得编写和编译NSIS脚本所需的环境。 2. **脚本编辑器**:虽然NSIS本身...

    nsis示例脚本

    专栏中的文章里引用到了该脚本,因此上传,有需要的朋友可以下载配合专栏文章的阅读。

    NSIS安装程序制作工具v3.09增强版.zip

    在压缩包内,"NSIS安装程序制作工具v3.09增强版.txt"文件很可能是包含有关该版本的说明、教程或使用指南,它可能涵盖了如何下载、安装NSIS,以及如何编写和编译脚本的基本步骤。对于初学者,这份文档将是学习NSIS的...

    nsis-打包软件脚本示例.rar

    NSIS(Nullsoft Scriptable Install System)是一款强大的开源安装制作系统,它允许用户使用简单的脚本语言创建Windows安装程序。这个“nsis-打包软件脚本示例.rar”压缩包包含了一个NSIS脚本,可以作为参考来学习...

    NSIS安装过程生成log,卸载过程调用log卸载文件

    标题 "NSIS安装过程生成log,卸载过程调用log卸载文件" 涉及的是使用NSIS(Nullsoft Scriptable Install System)创建安装程序时如何生成日志并在卸载过程中利用这些日志来卸载文件的知识。NSIS是一个开源的Windows...

Global site tag (gtag.js) - Google Analytics