安装软件NSIS脚本详细教程
发布时间:2020-10-10 19:44:54 所属栏目:教程 来源:xy
导读:NSIS(Nullsoft Installation System)是一个小巧高效的安装软件。 可通过样例修改或根据自己要求编写 NSI 脚本文件来定制自己的安装系统,可实现许可协议的显示、安装类型的选择、写入注册表、写入ini文件、连接程序外壳、语句跳转、提示信息显示、创建卸
NSIS(Nullsoft Installation System)是一个小巧高效的安装软件。 可通过样例修改或根据自己要求编写 NSI 脚本文件来定制自己的安装系统,可实现许可协议的显示、安装类型的选择、写入注册表、写入ini文件、连接程序外壳、语句跳转、提示信息显示、创建卸载程序、定制安装和卸载程序的图标、创建快捷方式等其他安装程序应有的功能, 是一款操作简单、功能强大的高效率安装软件精品。 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 $PROGRAMFILESQUHAIL"那么这就是我们的目录了! 对应卸载命令: RMDir 要删除的目录 4:CreateDirectory 要创建的路径 创建 (递归创建) 指定的目录。当目录不能创建时会放置一个错误标记。 你也可以指定一个绝对路径。 CreateShortCut 快捷文件.lnk 目标文件 [参数 [图标文件 [图标索引号 [启动选项 [键盘快捷键 [描述]]]]]] 创建一个指向 “目标文件” 的快捷方式 “快捷文件.lnk”,可以带 “参数” 参数. 就是创建快捷方式 对应卸载命令: Delete 5:RegDLL dll文件 [入口点名称] 载入指定的 DLL 并且调用 DllRegisterServer (或入口点名称,当指定之后)。当产生一个错误的时候会置一个错误标记(例如不能载入 DLL,不能初始化 OLE,不能找到入口点,或者函数返回任何其它错误 ERROR_SUCCESS (=0)). 其实就是注册或加载你要的插件! 如:RegDLL $INSTDIRCodecsh264dec.ax 对应的卸载命令 UnRegDLL 6:Exec 命令 这应该算是常用的命令了,执行一个指定的程序并且立即继续安装,就是直接执行一个程序. ExecWait 命令 [用户变量(返回代码)] 执行一个指定的程序并且等待运行处理结束. 如:运行一个安装文件 .inf ExecWait "RunDll32 advpack.dll,LaunchINFSection skins.inf,DefaultInstall" 对应卸载 ExecWait "RunDll32 advpack.dll,LaunchINFSection $windirINFskins.inf,DefaultunInstall" 当然DefaultunInstall是不定的,具体要看inf文件,它可以定义[unInstall]OR [DEL]或者别的,如果没有卸载段就无法卸载! 以上应该可以简单的做个安装包了吧! 7:ReadINIStr 用户变量(输出) INI文件 区段 项 从 “INI文件” 的 “区段” 区段读取 “项” 的值并把该值输出到用户变量。如果该项未找到时会放置一个错误标记且该用户变量被赋为空值。 对应卸载 DeleteINISec INI文件 区段 从“INI文件” 里删除整个区段 “区段” DeleteINISec $TEMPsomething.ini Field 2 DeleteINIStr INI文件 区段 字串 从“INI文件” 里的 “区段” 区段删除 “字串” 字串。 DeleteINIStr $TEMPsomething.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 "$EXEDIRmplayerc.exe" +3 0 MessageBox MB_OK|MB_ICONEXCLAMATION "请放到MY MPC LOOKOU目录下运行 " 15:Rename [/REBOOTOK] 源文件 目标文件 把 源文件 重命名为 目标文件 如: Rename $INSTDIRfile.ext $INSTDIRfile.dat (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |