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

相关文章

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

Weex入门教程之3,使用 Vue 开发 Weex 页面

环境安装 在这里简略地介绍下,详细看官方教程 Node.js 环境 Node.js官网 通常,安装了 Node.js 环境,npm 包管理工具也随之安装了。因此,直接使用 npm 来安装 weex-toolkit。 npm 是一个 JavaScript 包管理工具,它可以让开发者轻松共享和重用代码。Weex 很多依赖来自社区,同样,Weex 也将很多工具发布到社区方便开发者使用。

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Python简单入门教程helloworld

Python 学习资源 推荐书籍: Python核心编程(第二版) (强烈推荐,建议有一定基础的看,或者看完简明Python教程再看) Python 基础教程 第二版 (入门,没有核心编程好,但也不错) 编写高质量代码:改善Python程序的91个建议 (进阶,有一定基础再看) 书籍下载: Python 教程(部分内容来源于网络, 历时一年多总结整理的,给刚刚入门的

【超级干货】2天速成PyTorch深度学习入门教程,缓解研究生焦虑

3、cnn基础 卷积神经网络 输入层 —输入图片矩阵 输入层一般是 RGB 图像或单通道的灰度图像,图片像素值在[0,255],可以用矩阵表示图片 卷积层 —特征提取 人通过特征进行图像识别,根据左图直的笔画判断X,右图曲的笔画判断圆 卷积操作 激活层 —加强特征 池化层 —压缩数据 全连接层 —进行分类 输出层 —输出分类概率 4、基于LeNet

【2024最新】Python入门教程(非常详细)从零基础入门到精通,看完这一篇就够了!

前言 本文罗列了了python零基础入门到精通的详细教程,内容均以知识目录的形式展开。 第一章:python基础之markdown Typora软件下载Typora基本使用Typora补充说明编程与编程语言计算机的本质计算机五大组成部分计算机三大核心硬件操作系统 第二章:编程语言的发展史和第一个Python程序 文件的概念计算机内部数据原理编程语言发展史编程语言的分类python解释器版

TestNG 入门教程

阅读目录 TestNG介绍在Eclipse中在线安装TestNG在Eclipse中离线安装TestngTestNG最简单的测试TestNG的基本注解TestNG中如何执行测试使用testtng.xml 文件执行 case TestNG按顺序执行CaseTestNG异常测试TestNG组测试TestNG参数化测试TestNG忽略测试TestNG 依赖测试TestNG测试结果报告   Test

Weex入门教程之,关注weex-toolkit命令变更

由于weex的版本处于快速迭代中,我们需要时刻关注其变动,因为weex可能修复了某些bug或新增了一些功能。 关注链接:  原码链接:https://github.com/weexteam/weex-toolkit  发布链接:https://www.npmjs.com/package/weex-toolkit 或者使用帮助命令查看 Microsoft Windows [版本 10.0.10

神仙级AI大模型入门教程(非常详细),从零基础入门到精通,从看这篇开始!

一.初聊大模型 1.为什么要学习大模型? 在学习大模型之前,你不必担心自己缺乏相关知识或认为这太难。我坚信,只要你有学习的意愿并付出努力,你就能够掌握大模型,并能够用它们完成许多有意义的事情。在这个快速变化的时代,虽然新技术和概念不断涌现,但希望你能静下心来,踏实地学习。一旦你精通了某项技术,你就能够用它来实现自己的目标,甚至可能找到理想的工作或完成具有挑战性的项目。 在众多的技术中,大模型