首页 > 其他分享 >NSIS 入门教程 (二)

NSIS 入门教程 (二)

时间:2024-06-22 18:10:31浏览次数:3  
标签:exe 自定义 INSTDIR 入门教程 NSIS 安装程序 安装 Page

引言      在教程的第一部分中创建第一个安装程序后,我们还将需要删除其安装区段中已安装的文件。我们还将展示更多安装引导页面,让用户有机会选择安装的某些部分。      卸载      创建一个安装程序.可以干净的卸载,不仅是一种礼貌,对于程序的开发与发行方也有很多好处:      • 对于更新,首先可以干净地删除旧版本文件。这意味着新版本不再需要的旧文件不会产生任何副作用。      • 如果用户很难卸载一个他不喜欢的程序,他以后就不太可能尝试我们的其他产品。      为了将卸载程序添加到教程第一部分的安装程序中,我们复制“第一个安装程序”的脚本并更改/扩展它,使其如下所示:   

Name "Second Installer"


OutFile "secondinstaller.exe"
InstallDir $PROGRAMFILES\MySecondInstaller


Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles


Section ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
WriteUninstaller $INSTDIR\uninstall.exe
SectionEnd


Section "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.nsh


Name "Third Installer"


OutFile "thirdinstaller.exe"
InstallDir $PROGRAMFILES\MyThirdInstaller


Page license
Page custom getUsername nsDialogsPageLeave
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles


LicenseData "NSIS脚本文件.nsi"
Var Text
Var Dialog
Function ".onInit"
InitPluginsDir
#此处预释放某些安装必需的资源或者文件....
#File /oname=$PLUGINSDIR\name.ini "name.ini"
FunctionEnd


Function 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
FunctionEnd


Function nsDialogsPageLeave
${NSD_GetText} $Text $0
MessageBox MB_OK " 用户名或密码是: $0 "
FunctionEnd


Section ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
WriteUninstaller $INSTDIR\uninstall.exe
SectionEnd


Section "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.nsh


Name " 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 instfiles


LicenseData "license.txt"


Var Text
Var Dialog
Function ".onInit"
InitPluginsDir
#此处预释放某些安装必须的资源或者文件....
#File /oname=$PLUGINSDIR\name.ini "name.ini"
FunctionEnd


Function 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
FunctionEnd


Function nsDialogsPageLeave
${NSD_GetText} $Text $0
MessageBox MB_OK " 用户名或密码是: $0 "
FunctionEnd


Section ""
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" 1
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoRepair" 1
SectionEnd


Section "Sample Text File"
  File "license.txt"
SectionEnd


Section /o "Another Sample Text File"
  File "license2.txt"
SectionEnd


Section "Start Menu Shortcuts"
  CreateDirectory "$SMPROGRAMS\${INSTALLATIONNAME}"
  CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
  CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\notepad.lnk" "$INSTDIR\notepad.exe" "" "$INSTDIR\notepad.exe" 0
SectionEnd


Section "Uninstall"
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}"
  Delete $INSTDIR\uninstall.exe
  Delete $INSTDIR\notepad.exe
  Delete  $INSTDIR\license.txt
  Delete  $INSTDIR\license2.txt
  RMDir $INSTDIR
  Delete "$SMPROGRAMS\${INSTALLATIONNAME}\*.*"
  RMDir "$SMPROGRAMS\${INSTALLATIONNAME}"
SectionEnd

 

!define      使用 !define 我们定义一个包含安装名称的常量。然后我们每次都使用这个常量来代替名称。这意味着我们可以轻松地在一处更改安装名称,并且不会忘记路径等。      Page component      此页面命令将显示组件的选择。脚本中的每个区段都是一个组件,可以单独选择和取消选择。名称为空的区段为隐藏区段,隐藏区段始终会被安装.      Section "Sample Text File"      一个与可选组件对应的区段,用户可以选择安装或不安装。通常,一个组件默认是选中的,并会相应地进行安装。如果有在正常情况下不需要安装的可选组件,可以使用 /o(表示可选)开关来指定这些组件。      CreateDirectory      CreateDirectory 创建指定的目录。如果层次结构中较高的目录尚不存在,本命令会创建它们。      CreateShortCut      CreateShortcut 创建具有指定路径和文件名的快捷方式。      WriteRegStrWriteRegDWORD      要将值写入注册表,请使用命令 WriteRegStr、WriteRegDWORD 及其相关命令。如果该密钥尚不存在,则会自动创建。      DeleteRegKey      相应地,DeleteRegKey 从注册表中删除一个键。      本章小结:      在我们已经介绍了安装程序的主要元素之后,在本教程的第三部分中,我们将研究现代用户界面,以便为安装程序提供更现代的外观。 

标签:exe,自定义,INSTDIR,入门教程,NSIS,安装程序,安装,Page
From: https://www.cnblogs.com/NSIS/p/18262587

相关文章

  • MyBatis-Plus入门教程(一)
    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上为其提供了许多便捷功能,使开发者能够更快速、高效地进行数据库操作。MyBatis-Plus简介1.什么是MyBatis-Plus?MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它旨在简化开发过程,减少重复代码,提高开发效率。MP通......
  • Mybatis-plus入门教程(二)
    第一步:环境准备1.添加依赖确保在项目的构建文件中添加MyBatis-Plus依赖。Maven:<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.4</version></dependency>Gradle:im......
  • NSIS 入门教程 (一)
     介绍大多数应用程序都附带一个安装程序,它将所需的文件复制到正确的文件夹中,创建注册表项,并提供卸载例程以(希望)从计算机中彻底删除应用程序有多种解决方案可以为自主开发的应用程序配备安装程序。除了InstallShield或Wise等商业产品外,还有开源安装工具NullsoftScriptableIns......
  • 怎么使用云桌面(云电脑)?ToDesk新手入门教程
    在当今数字化时代,个人用户对于电脑性能的需求日益提升,而云电脑(又可称为云桌面)作为一种新型的电脑配备模式,正在逐渐进入人们的视野。对于很多新手来说,可能是第一次接触到云电脑软件,今天小社长就以ToDesk云电脑为例子,为大家详细解析如何从零开始,轻松上手云电脑。【必备工具和设备......
  • 【第12章】别人的工作流,如何使用和调试(下)?(安装视频生成模型SVD/服务器报错/爆显存/丢图
    ......
  • Maven入门教程
    Maven是一款基于Java平台的项目管理和整合工具,它极大地简化了项目的开发、构建、测试、打包和部署过程。以下是Maven的详细教程,内容涵盖了从安装到部署的各个主要步骤:一、Maven的简介Maven诞生于2001年3月左右,由JasonVanZyl创立。它将项目的开发和管理过程抽象成一个项......
  • SQL 入门教程:从基础到实践
    前言SQL(StructuredQueryLanguage)是一种用于管理和操作关系型数据库的标准语言。无论你是测试工程师、开发人员,还是数据分析师,掌握SQL都能帮助你更高效地工作。本文将详细介绍SQL的基本概念、常用语法和实践操作,帮助初学者快速入门。什么是SQL?SQL是一种标准化的语言,用......
  • 数据库MySQL——从0到1入门教程
    Q:为什么需要MySQL?A:网络服务中,我们需要存储、管理大量的数据,并确保数据的安全、实现增删改查操作的高效,因此需要一个系统用来专门管理数据,以实现上述的高性能要求,数据库管理系统应需而生八股如下:数据持久性:数据库能够持久化存储数据,确保数据在系统关闭或崩溃后依然存在......
  • 【第8章】如何利用ControlNet生成“可控画面”?(配置要求/一键安装/快速上手/生成第一张
    这节我们来讲AI绘画领域中一个很重要的概念:ControlNet,看下如何让生成的画面更可控。......
  • 【第9章】“基础工作流”怎么用?(图生图/局部重绘/VAE/更多基础工作流)ComfyUI基础入门教
    ......