NSIS 入门教程 (二)

2024-06-22 20:20
文章标签 nsis 入门教程

本文主要是介绍NSIS 入门教程 (二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言 

在教程的第一部分中创建第一个安装程序后,我们还将需要删除其安装区段中已安装的文件。我们还将展示更多安装引导页面,让用户有机会选择安装的某些部分。 

卸载 

创建一个安装程序.可以干净的卸载,不仅是一种礼貌,对于程序的开发与发行方也有很多好处: 

• 对于更新,首先可以干净地删除旧版本文件。这意味着新版本不再需要的旧文件不会产生任何副作用。 

• 如果用户很难卸载一个他不喜欢的程序,他以后就不太可能尝试我们的其他产品。 

为了将卸载程序添加到教程第一部分的安装程序中,我们复制“第一个安装程序”的脚本并更改/扩展它,使其如下所示:

Name "Second Installer"OutFile "secondinstaller.exe"
InstallDir $PROGRAMFILES\MySecondInstallerPage directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfilesSection ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
WriteUninstaller $INSTDIR\uninstall.exe
SectionEndSection "Uninstall"
Delete $INSTDIR\uninstall.exe
Delete $INSTDIR\notepad.exe
RMDir $INSTDIR
SectionEnd

除了将名称更改为“"Second Installer(第二个安装程序)”之外,我们还添加了三条指令: 

UninstPage 

UninstPage 后面两个条目表示应显示两个对话框页面以删除已安装的文件。第一个是卸载确认页面,确认您是否确实要删除已安装的文件,第二个页面显示卸载进度。 

WriteUninstaller 

WriteUninstaller 命令将具有指定名称的卸载程序写入指定文件夹。 

Section "Uninstall" 

此区段用于删除安装。首先,删除使用的是 WriteUninstaller 创建的卸载程序。然后删除安装的文件 (notepad.exe) 和安装目录。 

要显示安装许可证,有专用命令。该命令属性指定包含许可条件的文件(.txt 或.rtf 格式)。该属性允许您自定义显示在安装许可证页面上方的文本。 

Page licenseLicense DataLicenseText 

在很多时候,安装程序正式复制安装文件之前,可能需要查询与核对用户名和密码,这就涉及到自定义验证界面,创建 NSIS 自定义界面,我们有两个插件使用,最早是 InstallOptions + ini 文件,当前已经全部被 nsDialogs 插件替代!此处敲黑板!!但由于篇幅受限,并且作为入门级别的教程,不宜展开讨论自定义页面的制作,此处提及仅仅是为了表述几个常用的函数或者命令,如果想深入了解自定义界面,建议掌握基本入门技巧后,仔细阅读 nsDialogs 帮助文档. 

安装程序脚本中需要调整一些内容,看起来像这样: 

!include nsdialogs.nshName "Third Installer"OutFile "thirdinstaller.exe"
InstallDir $PROGRAMFILES\MyThirdInstallerPage license
Page custom getUsername nsDialogsPageLeave
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfilesLicenseData "NSIS脚本文件.nsi"
Var Text
Var Dialog
Function ".onInit"
InitPluginsDir
#此处预释放某些安装必需的资源或者文件....
#File /oname=$PLUGINSDIR\name.ini "name.ini"
FunctionEndFunction getUsername
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 14u 19% 12u "用户名或密码"
${NSD_CreateText} 20% 13u 100% 15u ""
Pop $Text
nsDialogs::Show
FunctionEndFunction nsDialogsPageLeave
${NSD_GetText} $Text $0
MessageBox MB_OK " 用户名或密码是: $0 "
FunctionEndSection ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
WriteUninstaller $INSTDIR\uninstall.exe
SectionEndSection "Uninstall"
Delete $INSTDIR\uninstall.exe
Delete $INSTDIR\notepad.exe
RMDir $INSTDIR
SectionEnd

 

 新知识点的解释: 

Page custom  

使用此命令可以添加自定义页面。参数 getUsername 指定了用于显示该页面的函数名称。该函数将在下文中进行解释。 

Var

为了能够使用全局变量,必须首先声明它们。这里我们提供了两个变量来存储输入的值和自定义页面句柄。 

Function ".onInit" 

这是一个所谓的回调函数。回调函数会在安装程序执行到特定点时被调用。.onInit 会在安装程序几乎完成初始化时调用。 

我们使用这个回调函数将某些安装需要的资源或者文件解压到临时文件夹中。首先使用 InitPluginsDir 命令初始化目录 $PLUGINSDIR。$PLUGINSDIR 是一个临时目录,在安装程序结束时会被删除。接下来,我们将文件复制到这个文件夹中,使其在安装过程中可用。 

Function getUsername 

这是已经提到的功能。核心元素是 nsDialogs 插件调用“Create”函数,创建出一个自定义的用于验证用户名或者密码的自定义界面.此处不再展开讲述! 

在我们的示例中,我们只是使用 MessageBox 显示了这些内容,但您也可以在安装期间将它们写入注册表(使用WriteRegStr命令)。然后应在卸载期间删除写入注册表的值(使用DeleteRegKey或DeleteRegValue)。 

Function nsDialogsPageLeave 

页面离开函数,当该函数被定义,并且用户在本自定义界面点击"下一步"时将会被立即调用,用以处理和验证本自定义界面中用户的输入! 

组件安装与选择,快捷方式和注册表条目与开始菜单创建... 

我们的安装程序仍然缺少三件事: 

• 选择要安装的组件 

• 创建开始菜单条目 

• 在控制面板中添加删除软件的条目 

在我们的第四个安装程序中,我们将满足这些需求。像往常一样,脚本之后会有对代码更改的解释。 

!include nsdialogs.nshName " fourth Installer"OutFile "fourthinstaller.exe"
InstallDir $PROGRAMFILES\MyFourthInstaller!define INSTALLATIONNAME "MyForthInstaller"Page license
Page custom getUsername nsDialogsPageLeave
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfilesLicenseData "license.txt"Var Text
Var Dialog
Function ".onInit"
InitPluginsDir
#此处预释放某些安装必须的资源或者文件....
#File /oname=$PLUGINSDIR\name.ini "name.ini"
FunctionEndFunction getUsername
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 14u 19% 12u "用户名或密码"${NSD_CreateText} 20% 13u 100% 15u ""
Pop $Text
nsDialogs::Show
FunctionEndFunction nsDialogsPageLeave
${NSD_GetText} $Text $0
MessageBox MB_OK " 用户名或密码是: $0 "
FunctionEndSection ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
WriteUninstaller $INSTDIR\uninstall.exe
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "DisplayName" "Forth Installer"WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "UninstallString" '"$INSTDIR\uninstall.exe"'WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoModify" 1WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoRepair" 1
SectionEndSection "Sample Text File"File "license.txt"
SectionEndSection /o "Another Sample Text File"File "license2.txt"
SectionEndSection "Start Menu Shortcuts"CreateDirectory "$SMPROGRAMS\${INSTALLATIONNAME}"CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\notepad.lnk" "$INSTDIR\notepad.exe" "" "$INSTDIR\notepad.exe" 0
SectionEndSection "Uninstall"DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}"Delete $INSTDIR\uninstall.exeDelete $INSTDIR\notepad.exeDelete  $INSTDIR\license.txtDelete  $INSTDIR\license2.txtRMDir $INSTDIRDelete "$SMPROGRAMS\${INSTALLATIONNAME}\*.*"RMDir "$SMPROGRAMS\${INSTALLATIONNAME}"
SectionEnd

!define 

使用 !define 我们定义一个包含安装名称的常量。然后我们每次都使用这个常量来代替名称。这意味着我们可以轻松地在一处更改安装名称,并且不会忘记路径等。 

Page component 

此页面命令将显示组件的选择。脚本中的每个区段都是一个组件,可以单独选择和取消选择。名称为空的区段为隐藏区段,隐藏区段始终会被安装. 

Section "Sample Text File" 

一个与可选组件对应的区段,用户可以选择安装或不安装。通常,一个组件默认是选中的,并会相应地进行安装。如果有在正常情况下不需要安装的可选组件,可以使用 /o(表示可选)开关来指定这些组件。 

CreateDirectory 

CreateDirectory 创建指定的目录。如果层次结构中较高的目录尚不存在,本命令会创建它们。 

CreateShortCut 

CreateShortcut 创建具有指定路径和文件名的快捷方式。 

WriteRegStrWriteRegDWORD 

要将值写入注册表,请使用命令 WriteRegStr、WriteRegDWORD 及其相关命令。如果该密钥尚不存在,则会自动创建。 

DeleteRegKey 

相应地,DeleteRegKey 从注册表中删除一个键。 

本章小结

在我们已经介绍了安装程序的主要元素之后,在本教程的第三部分中,我们将研究现代用户界面,以便为安装程序提供更现代的外观。 

这篇关于NSIS 入门教程 (二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085311

相关文章

NSIS 入门教程 (三)

引言 在教程的第二部分中,我们为安装程序增加了一个卸载程序,并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。 更现代的外观 为了给安装程序一个更现代的外观,我们要启用现代用户界面。要提升我们的安装程序(基于“secondinstaller”),不需要做太多的修改: !include "MUI2.nsh"Name "Fifth Installer"

MyBatis-Plus入门教程(一)

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上为其提供了许多便捷功能,使开发者能够更快速、高效地进行数据库操作。 MyBatis-Plus 简介 1. 什么是 MyBatis-Plus? MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,它旨在简化开发过程,减少重复代码,提高开发效率。MP 通过封装和扩展 MyBatis 提

NSIS 入门教程 (一)

介绍 大多数应用程序都附带一个安装程序,它将所需的文件复制到正确的文件夹中,创建注册表项,并提供卸载例程以(希望)从计算机中彻底删除应用程序. 有多种解决方案可以为自主开发的应用程序配备安装程序。除了Install Shield或Wise等商业产品外,还有开源安装工具Nullsoft Scriptable Install System (NSIS)。在本教程中,我将展示使用 NSIS 创建安装

Spring Boot入门教程

Spring Boot入门教程可以按照以下步骤进行,以确保清晰和有条理地学习: 1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它使用了特定的方式来进行配置,使开发人员不再需要定义样板化的配置。Spring Boot可以轻松创建可以“直接运行”的、独立的、生产级的基于Spring的应用程序。 2.

Keras入门教程 ——1.线性回归建模(快速入门)

Keras入门教程 1.线性回归建模(快速入门)2.线性模型的优化3.波士顿房价回归(MPL)4.卷积神经网络(CNN)5.使用LSTM RNN进行时间序列预测6.Keras 预训练模型应用 线性回归建模(快速入门) 前言 Keras 是何物?Keras 是一个用 Python 编写的高级神经网络 API。其是以TesorFlow作为后端运行的。我们安装深度学习框架tensor

《军哥谈CI框架》之入门教程之第四讲

大家新年好!不知不觉我们来到了2013年,军哥祝大家在新的一年里身体儿杠杠滴,吃嘛嘛香,新年新气象,财源滚滚~~ 今天我们来学习CI中的模型和辅助函数。 【本讲内容】 一、模型; 之前我们分别介绍了MVC模式中的C层和V层,而M层还没有谈到。现在我们来谈一谈。 了解什么是模型?如何创建一个简单的模型?怎样载入模型? 二、辅助函数。

Nvidia Isaac Sim 入门教程 2024(2)安装与配置

Isaac Sim 安装与环境配置 版权信息 Copyright 2023-2024 Herman Ye@Auromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other mat

【第10章】如何获取免费“工作流”?(国内外网站推荐/下载/使用)ComfyUI基础入门教程

使用ComfyUI的一个重点,就是可以快速使用别人分享的工作流,来完成特定的图像生成任务,从而提升工作效率。 那么,去哪儿可以找到别人分享的工作流呢? 这节课我们了解下,比较知名的工作流网站有哪些?以及如何下载? 备注:下节课再讲如何使用。 🎆“老牌” workflow网站Openart.ai 【网址】https://openart.ai/home 【网络】需要魔法,才能

【第11章】别人的工作流,如何使用和调试(上)?(2类必现报错/缺失节点/缺失模型/思路/实操/通用调试步骤)ComfyUI基础入门教程

经过前面章节的学习,相信大家对于工作流是什么?如何搭建?怎么使用基础的工作流?已经很清楚了。 那么,接下来的课程,我们会上一点难度, 并且更接近实战状态了。 这节课,我们就用一套从“文本 - 静帧 - 视频”的AI短片全流程工作流,讲一下,网络上下载的工作流,需要如何调试才能正常使用? 🏀前期准备 首先,我们需要从网盘找到本节课需要用到的工作流——AI短片全流程 【AI短

LaTex入门教程

目录 1.说明 2.页面的分区 3.入门介绍 (1)命令 (2)环境 (3)声明 (4)注释 4.代码结构 (1)导言区 (2)支持中文 (3)警告说明 (4)文章层级 1.说明 之前主要是对于这个软件的使用并不熟悉,做的主要是一些入门的工作,现在决定要系统的学习这个软件,包括他的诸多功能; 还是那句话,推荐使用的就是这个overleaf这个线上编辑器,这个不