windows上利用NSIS制作安装向导程序及常见问题

一、前言

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

二、演示

   以Nsis_3.06.1.0增强版,打包QT发布的程序为例,在Windows上定制安装向导。

1、点击 “脚本编辑器VNISEdit”

2、选择“新建脚本:向导”

3、这里的参数自己都可以设置试一下,点击下一步:
以打包一个test.exe程序为例:

这个是做闪屏的,默认不勾选。

4、授权文件就是我们的licence.txt文件,这个文件的编码ASCII编码,就是记事本新建的默认文本格式,这个文件的的路径必须是存在的,否则后面的时候不能生成安装程序。

这里就是添加要打包程序文件夹的步骤。先把默认的模版文件删掉

勾选包含子目录(如果没有包含子目录选择就直接点击确定,后面再在脚本中加/r参数就行了)

点击下一步:
添加桌面快捷方式

手动补全:

test.lnk是自己的快捷方式名
$INSTDIR\test.exe 这个是你打包的文件中的可执行文件

保存脚本,下次就可以不用重新设置一遍了(要注意的是,脚本里使用的是相对路径)。

如果报错,下面有提示信息,看看什么没有设置。设置好后,下面就会出现这个安装向导程序:

安装完成后,桌面有快捷图标。双击,看是否出现界面。
安装目录中,有个uninst.exe卸载程序

三、NSIS在安装完成界面,添加开机自启动勾选选项的实现

对于制作好的安装包,有些时候可能需要在安装完成界面上添加一个可勾选的开机自启动的选项。

下面是具体的细节:

1.在安装完成界面设置添加如下代码:

!define MUI_FINISHPAGE_SHOWREADME
!define MUI_FINISHPAGE_SHOWREADME_Function AutoBoot
!define MUI_FINISHPAGE_SHOWREADME_TEXT "开机自启动"

上面的代码务必要添加在 " !insertmacro MUI_PAGE_FINISH "之前。

2.在Section后区段的后面添加Function部分(在Section之后,是为了避免产生未知的错误)

代码如下:

Function AutoBoot
    WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "testKey" "test.exe"
FunctionEnd

把上面的test替换成你要打包程序名就行了,主要是把信息写入系统注册表。

3.前两步已经可以实现开机自启动了。这最后一步,需要在卸载和初始化区段里面把注册表信息删除。原因是让用户在卸载程序和覆盖安装程序后,不会受到刚开始安装程序的写入系统注册表的影响。

在Section Uninstall里面添加如下代码:

  ;删除开机自启
  DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "testKey"

最后编译运行,就会发现在程序的安装完成界面出现了可勾选的开机自启动选项。

学习

注册启动项

  • WriteRegStr
    root_key + subkey + key_name + value
  • 以Test.exe为例, 注册启动项命令如下
  • WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "TestAddKey" "$INSTDIR\Test.exe"
  • #该命令放在安装区域(Section "MainSection" SEC01), 或者注册区域(Section -Post)都可以

命令解释:

  • root_key: 注册表根键值: HKCU (HKEY_CURRENT_USER)
  • subkey: 子键值: Run键(解释见前言)
  • key_name: 新增键值名称: TestAddKey
  • value: 启动命令: “Test.exe绝对路径”, 如有命令行参数可以在路径后添加

删除启动项

  • DeleteRegValue
    root_key + subkey + key_name
  • 以Test.exe为例, 删除启动项命令如下
  • DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "TestAddKey"
  • #该命令放在卸载命令区域(Section Uninstall)

命令解释:

  • root_key: 注册表根键: HKCU (HKEY_CURRENT_USER)
  • subkey: 子键位置: Run键(解释见前言)
  • key_name: 要删除的Key名称: TestAddKey
  • 验证
  • 打开注册表: WIN + R 输入: regedit

  • 在HKCU下依次展开找到Run键
  • 观察Run键下子键是否新增/删除, 键值是否正确

四、使用NSIS制作的安装包安装后,无法卸载干净的问题

1、使用Process进程检测终止插件。

下载Process进程检测终止插件,然后按照说明文档放到NSIS安装目录对应的位置。

文件 Process.dll - ANSI 版放到 Plugins\x86-ansi 目录。

文件 Unicode\Process.dll - Unicode 版放到 Plugins\x86-unicode 目录。

或在脚本中使用:

!addPluginDir /x86-ansi .

!addPluginDir /x86-unicode .\Unicode

语法来指定自定义插件目录。点 (.) 代表当前目录,或者其他自定义路径。

用法:

Process::FindProcess "ProcessName.exe"

Pop $var

# 1 - 找到

# 0 - 未找到

Process::KillProcess "ProcessName.exe"

Pop $var

# 1 - 成功终止

# 0 - 未能终止

注:为保证终止结果准确,只终止一个进程。如果多个请使用循环。

这里的

RMDir "$INSTDIR"

改成

RMDir /r "$INSTDIR"

这样就可以把整个hello安装目录的所有文件,包括这个目录都删掉。

RMDir

[/r] [/REBOOTOK] 目录名

删除指定的目录(没有通配符的完整路径)。没有 /r 参数时只有在目录为空时才会被删除。如果指定了 /r ,则目录会被递归删除,所以在指定目录下的所有文件和目录均被删除。如果指定了 /REBOOTOK ,任何当前不能删除的文件或目录将会在重启后被删除 – 如果文件或目录需要在重启时被删除,会放置一个重启的标记。当文件或目录不能被删除时放置一个错误的标记。

五、解决程序安装后要右键管理员权限运行问题

如下图,加入一下几行代码

;让安装程序以管理权限运行
RequestExecutionLevel admin

Section "test"
 	;针对当前用户有效
	WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\xxxx.exe" "RUNASADMIN"
	;针对所有用户有效
	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\xxxx.exe" "RUNASADMIN"
SectionEnd

注意:程序安装时需要使用管理员权限进行安装,才能往注册写入信息

六、下载

Process进程检测终止.zip

链接:https://pan.baidu.com/s/1fO0NfqtNUO-QAo-ZtrXBnQ?pwd=2pun 
提取码:2pun

Nsis_3.06.1.0增强版.exe

链接:https://pan.baidu.com/s/10DSvhvGiNJzTPZpwKcdRag?pwd=dd7i 
提取码:dd7i

NSIS安装制作教程 分为三个目录:基础,插件,脚本 NSIS System 插件 NSIS VPatch 3.1插件 NSIS InstallOptions 2 插件 NSIS Modern UI(新式用户界面)插件 NSIS的Modern UI插件 NSIS里特殊符号的表达方法 两组件互斥 NSIS 常用小问题合集 资源替换式的美化包制作方式代码 安装完毕后如何刷新文件关联 教你如何编程调用 NSIS 的插件 NSIS安装程序概要 实现 NSIS 自定义页面中的控件操作代码 如何使用NSIS实现多目录安装设置 如何用NSIS在加入注册表 用NSIS 制作自己的安装程序 bluewind 的 wmp9 nsis安装脚本 NSIS安装脚本简明教程 取得winamp的NSIS脚本的教程 迅雷5.7.3.389 AYU增强版的安装脚本 NSIS制作迅雷安装的脚本 迅雷5.7.2.371 DDR1.5版去广告版源代码说明 NSIS删除安装程序自身 帮助文件中关于静默安装的说明 NSIS实现静默安装的两种方法 nsis的附加任务代码 关于 NSIS 写入注册表的问题 少轻狂制作Windows优化大师的安装脚本 aipc编写的nsis极点安装脚本 官方 NSIS 插件全集 全方位掌握NSIS的使用 NSIS语言里怎样安装一个.inf文件? 如果要关联某个文件给程序应该怎么做? 如何避免显示解压缩进度框? 关于检测操作系统的问题 在结束页面添加运行程序选项 NSIS的botton二选一如何实现? NSIS灵活应用用逻辑库 NSIS调用inf安装驱动后的卸载问题 NSIS的组件互斥代码 在NSIS中如何禁止一个组件组的父项的点击事件 关于打破 NSIS 的 8192 字节限制的更简单方法 NSIS 自定义页面结合组件选择安装 一个关于组件跟自定义页面的控制问题 如何把安装的卸载程序放到其他目录
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靓仔佳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值