NSIS 入门教程 (三)

引言

在教程的第二部分中,我们为安装程序增加了一个卸载程序,并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。

更现代的外观

为了给安装程序一个更现代的外观,我们要启用现代用户界面。要提升我们的安装程序(基于“secondinstaller”),不需要做太多的修改:

!include "MUI2.nsh"

Name "Fifth Installer"
OutFile "fifthinstaller.exe"
InstallDir " $PROGRAMFILES \MyFifthInstaller"

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

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

上面的脚本一共做出了三项改变:

!include "MUI2.nsh"

插入 MUI2.nsh 文件,就好像它是我们脚本的一部分一样。所需的宏已在 MUI2.nsh 文件中定义。

!insertmacro ......

作为 Page 或 UninstPage 命令的替代,插入带有宏的所需页面。

!insertmacro MUI_LANGUAGE "English"

使用此宏可以插入英文文本.对于中文,需要指定语言为“SimpChinese”

第四个安装程序重装

我们当然希望将第二部分中添加的对话框也使用现代用户界面来实现。

下面开始:

!include "MUI2.nsh"

Name "Sixth Installer"
!define INSTALLATIONNAME "MySixthInstaller"
OutFile "MySixthInstaller.exe"

InstallDir $PROGRAMFILES\${INSTALLATIONNAME}

Page custom getUsername nsDialogsPageLeave

!insertmacro MUI_PAGE_LICENSE "license.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!insertmacro MUI_LANGUAGE "SimpChinese"

LangString PAGE_TITLE ${LANG_SimpChinese} "自定义页面示例"
LangString PAGE_SUBTITLE ${LANG_SimpChinese} "请输入用户名或密码"

Var Text
Var Dialog

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

Function getUsername
!insertmacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)
  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

NSIS Modern UI 2.0 安装程序

与“第四个安装程序”相比最重要的变化

我们已经在上面看到了!include 指令、!insertmacro MUI_LANGUAGE  命令和 !insertmacro MUI_PAGE_ ... 命令。Sections  被逐一从第四个安装程序中移植过来的。同样,Functions  也被移植过来,但有一个小而重要的变化:

!insertmacro MUI_HEADER_TEXT $(PAGE_TITLE) $(PAGE_SUBTITLE)

这行代码定义了自定义页面的标题栏文字内容。如脚本所示,这并不需要其他特殊的 !insertmacro 指令。标题和副标题内容使用 LangString 指令定义即可。

结论

通过这三篇入门教程,我们可以看到创建一个安装程序是相对简单的。

NSIS WiKi 是一个门户,提供各种脚本和代码片段,这些脚本和代码片段已经为许多需求提供了解决方案。在我的博客中,我也会继续在 NSIS 分类下发布自己对 nsis 的想法和解决方案。希望能帮到诸位刚入门的同好,与诸位共勉!

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java基于ssm+jsp 社区疫情防控管理信息系统

1前台首页功能模块 社区疫情防控管理信息系统,在社区疫情防控管理信息系统可以查看首页、物品信息、论坛信息、新闻资讯、我的、跳转到后台等内容,如图1所示。 图1系统首页界面图 用户登录、用户注册,通过注册填写账号、密码、姓名、身份证、…

supOS浅度集成

一、浅度集成介绍 浅度集成是根据项目或者演示要求而做的集成工作,通过接入supOS的单点登录,UI调整,菜单栏的集成,从而达到客户使用supOS平台来使用各个应用的能力。 二、浅度集成的作用 通过较少的研发投入使APP应用浅度融入到…

密码学-密码协议之零知识证明

一、前言 零知识证明实际上一种密码协议,该协议的一方称为证明者(Prover),通常用P表示,协议的另一方是验证者(Verifier),一般用V表示。零知识证明是指P试图使V相信某个论断是正确的,但却不向V提供任何有用的信息&…

随记:内卷是什么意思?

内卷,网络流行语,原指一类文化模式达到了某种最终的形态以后,既没有办法稳定下来,也没有办法转变为新的形态,而只能不断地在内部变得更加复杂的现象。经网络流传,很多高等学校学生用其来指代非理性的内部竞…

UsersGUI.java用户界面

完成效果图: 点击阅读按钮: 点击删除按钮: 点击新建按钮: Code /* This GUI application allows users to manage their diaries: ​ Read: Users can read existing diaries. Create: Users can create new diaries. Delete: Us…

2024 年值得推荐的 10 款 iPhone 数据恢复软件

iPhone 从来都不是一个简单的打电话电话。它就像一台微型电脑,让我们互相联系、拍照、拍视频、发邮件、看文档、看书。然而,随着它成为日常生活的必需品,我们总是容易因各种原因丢失数据,如删除、恢复出厂设置、iOS 错误、文件同步…

基于Vue3.0 Node.js 的 大文件切片上传、秒传、断点续传实现方案梳理

✨💻 在处理大文件上传时,切片上传是提高效率与用户体验的关键技术之一。下面将详细介绍如何在前端利用Vue框架与Node.js后端配合,实现这一功能。 👆🏻大体流程 👆🏻一、文件切片上传 通过文件…

HTML静态网页成品作业(HTML+CSS)——故宫介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

ubuntu 22.04下利用webmin 搭建一个Wordpress 网站(2)

上次我们讲到第二部分,今天我们继续这一个话题 第三部分:利用webmin创建一个wordpress网站 1、在 Webmin 内安裝Apache 未使用的模块> Apache Webserver > 现在安装 会出现如下图所示的有关软件 刷新模快后 检查开机时要自动启动Apache 测…

TI毫米波雷达可以用串口调试助理来获取原始数据吗?

摘要:本文介绍一下如何使用普通的串口调试助理来读取到AWR1843毫米波雷达的数据的。 使用的硬件如下图所示。 软件就是普通的串口助理,我用的是SSCOM,其他串口助理也是可以的,核心作用其实就是发送一行行的指令而已。 操作方法&am…

HTML(18)——浮动

标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个 浮动 作用:让块级元素水平排列 属性名:float 属性值 left:左对齐right&#…

Google trend搜索关键词

Google trend地址:https://trends.google.com/trends/?geoUS&hlzh-CN 1、具体的操作步骤如下: 2、Google trend搜索页面如下:

https://curl.trillworks.com不能用的解决方法

gitee源码:https://gitee.com/Project0ne/curlconverter 首先打开上面的链接 然后下载文件 下载文件到本地 然后安装node.js(Node.js official website.)不会的自行百度,这里不做过多赘述。 在curlconverter文件夹下面打开终端(在文件夹下面右键-在终端打开) 输入 npm…

昇思25天学习打卡营第1天|快速入门

一、简介: 本节通过MindSpore已经封装好的API,快速实现一个深度学习模型的数据集准备、训练评估,模型参数保存和加载,对新手朋友十分友好。这里非常感谢华为昇思团队在算力和代码方面的指导。 二、环境准备: 在开始…

C# 唯一性进程的方法封装(Winform/WPF通用)

C#唯一进程封装 C# 唯一性进程的方法封装 public class UniqueProcess{/// <summary>/// 焦点切换指定的窗口&#xff0c;并将其带到前台/// </summary>/// <param name"hWnd"></param>/// <param name"fAltTab"></para…

搜狐视频全自动工具

项目介绍&#xff1a; 首先我们要用自己的一个号&#xff0c;作为主号&#xff0c;主号上发作品&#xff0c;利用不实名的小号通过脚本自动去浏览视频 小号看视频的同时会出现搜狐官方强行插入的广告&#xff0c;从而获得收益 收益介绍&#xff1a; 小号看一个视频会出现3-…

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言&#xff1a;第一部分详细讲解DDS核心框图&#xff0c;还请读者深入阅读第一部分&#xff0c;以便理解DDS核心思想 三刷小梅哥视频总结&#xff01; 小梅哥https://www.corecourse.com/lander 一、DDS简介 DDS&#xff08;Direct Digital Synthesizer&#xff09;即数字…

Scrivener v3 解锁版安装教程 (写作辅助软件)

前言 Scrivener&#xff0c;一个多功能的写作软件&#xff0c;被世界各地的作家广泛采用&#xff0c;从小说家到剧本家&#xff0c;再到非小说类作家和学术研究者&#xff0c;它的用户群跨越了广泛的领域&#xff0c;包括学生、法律专业人士、记者和翻译。这个软件非常注重用户…

Node.js版Selenium WebDriver教程

目录 介绍 导言 Selenium基础 环境设置 使用npm安装selenium-webdriver模块 配置和管理浏览器驱动器 下载火狐 下载安装 webDriver 第一个WebDriver脚本 介绍 导言 在当今数字化时代&#xff0c;Web应用程序的质量和性能至关重要。为了确保这些应用的可靠性&#xf…