当前位置: 首页 > news >正文

NSIS 安装windows 安装包(包括QT和MFC)

NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。

基本概念

区段

是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。卸载程序的区段名用"un."作为前缀。

/o表示该区段默认不选上,-表示隐藏区段(匿名区段也是隐藏区段),!表示需要粗体显示的区段。

Section "Installer Section"

SectionEnd  

Section "un.Uninstaller Section"

SectionEnd

函数

在nsi脚本中函数分为两种:用户自定义函数和回调函数。

用户自定义函数

Function <函数名>

 # some commands

FunctionEn

用户自定义函数仅当是Call指令调用时才被执行

回调函数

回调函数则是由在特定的时间点触发的程序段

安装逻辑定义以下回调函数

.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、.onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、.onVerifyInstDir

卸载逻辑回调函数

un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbort

变量

var关键字来定义变量,使用$来引用变量

$INSTDIR
用户定义的解压路径。
$PROGRAMFILES
程序文件目录(通常为 C:Program Files 但是运行时会检测)。

0- 9, R0 -R9

脚本中定义了寄存器变量0- 9, R0 -R9用于参数传递,以及系统变量用于特定用途使用这些参数应该通过PushPop的方式

$STARTMENU

开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。

$SMPROGRAMS

开始菜单程序目录(当你想定位 $STARTMENU程序 时可以使用它)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。

$SMSTARTUP

开始菜单程序/启动 目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

常用指令

File

作用:释放文件到当前输出路径。

如果使用了 /r 开关,匹配的文件将会在子目录里被递归的搜索。

将ProjectFiles目录下的所有文件释放到输出目。

SetOutPath "$INSTDIR"

SetOverwrite ifnewer

File /r "ProjectFiles*.*"

Delete

作用:从目标系统删除文件

Delete "$INSTDIR\uninst.exe"

RMDir

作用:删除目录

RMDir /r "$INSTDIR\*.*"

SetOutPath

作用:设置输出路径($OUTDIR)且当路径不存在时创建(需要时会递归创建)。必须为绝对路径名,通常都使用 $INSTDIR。

将用户定义的解压路径作为输出目录

SetOutPath $INSTDIR

CreateShortCut

作用:创建快捷文件.lnk 目标文件

CreateShortCut "$SMPROGRAMS\PSC_FS\Uninstall.lnk" "$INSTDIR\uninst.exe"

WriteRegStr、WriteRegExpandStr

作用:把字符串写入注册表

根键如下:

HKLM 或HKEY_LOCAL_MACHINE

HKCU 或HKEY_CURRENT_USER

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"

ReadRegStr

作用:读取注册表信息

ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{8d5fdf81-7022-423f-bd8b-b513a1050ae1}" "BundleVersion"

DeleteRegKey

作用:删除一个注册表键。

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"

Exec

作用:这应该算是常用的命令了,执行一个指定的程序并且立即继续安装,就是直接执行一个程序。

Exec "$INSTDIR\vc_redist.x86.exe  /q"   ;若不存在,执行静默安装  /q表示静默安装

ExecWait

作用:执行一个指定的程序并且等待运行处理结束。

Exec "$INSTDIR\vc_redist.x86.exe  /q"   ;若不存在,执行静默安装  /q表示静默安装

RegDLL

作用:载入指定的 DLL 并且调用 DllRegisterServer (或入口点名称,当指定之后)。其实就是注册或加载你要的插件

!insertmacro

作用:插入宏

通过宏插入欢迎页面

!insertmacro MUI_PAGE_WELCOME

StrCpy

作用:复制字符串

StrCpy $0 "a bbbbbbbb"

Push

作用:把一个字串压入堆栈,该字串可随后从堆栈里弹出。

Pop

作用:从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的,则会置一个错误标记。

Goto

作用:跳转到指定标记

IfErrors 

错误时跳转到标记 

IfErrors 0 VSRedistInstalled

MessageBox

作用:显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个,多个使用 | 来隔开。

MB_OK - 显示 OK 按钮

MB_OKCANCEL - 显示 OK 和取消按钮

MB_ABORTRETRYIGNORE - 显示退出、重试、忽略按钮

MB_RETRYCANCEL - 显示重试和取消按钮

MB_YESNO - 显示是和否按钮

MB_YESNOCANCEL - 显示是、否、取消按钮

MB_ICONEXCLAMATION - 显示惊叹号图标

MB_ICONINFORMATION - 显示信息图标

MB_ICONQUESTION - 显示问号图标

MB_ICONSTOP - 显示终止图标

MB_TOPMOST - 使消息框在最前端显示

MB_SETFOREGROUND - 设置前景

MB_RIGHT - 右对齐文本

MB_RTLREADING - RTL 阅读次序

Function un.onInit

   Push $R3

   ClearErrors

   ReadRegStr $R3  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "install"

   StrCmp $R3 "1"  uninstallfinish

   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" \

   /SD IDYES \

   IDYES uninstallfinish \

   IDNO  Abortuninstall

Abortuninstall:

    Abort

uninstallfinish:

   pop $R3

 FunctionEnd

NSIS工具安装包下载

链接:https://pan.baidu.com/s/1ticaAl3T7kp4kJOwSTCxWA 
提取码:xn2n

具体制作安装包的过程参考:https://www.cnblogs.com/hi-gdl/p/12449912.html

相关文章:

NSIS 安装windows 安装包(包括QT和MFC)

NSIS&#xff08;Nullsoft Scriptable Install System&#xff09;是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。 基本概念 区段 是对应某种安装/卸载选项的处理逻辑&#xff0c;该段代码仅当用户选择相应的选项才被执行…...

K8S----PVPVCSC

一、简介 1、PV(persistent volume)–持久卷 PV是集群中的一块存储,可以由管理员事先静态(static)制备, 也可以使用存储类(Storage Class)来动态(dynamic)制备。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件(volume p…...

RSIC-V“一芯”学习笔记(一)——概述

考研的文章和资料之后想写的时候再写怕趴 文章目录 一、阶段设计二、环境、开发语言和工具三、最重要的两个观念四、处理器芯片设计五、处理器芯片设计包含很多软件问题六、处理器芯片的评价指标七、复杂系统的构建和维护八、专业世界观九&#xff0c;提问的艺术(提问模板)十、…...

MATLAB读取图片并转换为二进制数据格式

文章目录 前言一、MATLAB 文件读取方法1、文本文件读取2、二进制文件读取3、 图像文件读取4、其他文件读取 二、常用的图像处理标准图片链接三、MATLAB读取图片并转换为二进制数据格式1、matlab 源码2、运行结果 前言 本文记录使用 MATLAB 读取图片并转换为二进制数据格式的方…...

时序数据库

SELECT *,max(lp_index) FROM lp.tdm_lp_original_data where ts > 2023-12-28 18:11:33.521 and ts < 2023-12-29 19:03:12.148 INTERVAL(2s) FILL(PREV) 在时间序列数据库TDengine中&#xff0c;FILL函数与GROUP BY子句结合使用&#xff0c;提供了对于在指定间隔内…...

【第一次使用finalshell连接虚拟机内的centos】小白处理方式

第一次使用finalshell连接centos7的时候&#xff0c;因为都是新环境什么都没有配置&#xff0c;所以就需要安装finalshell和对新的centos7 进行一些配置。 安装finalshel&#xff0c;默认不安装d盘&#xff0c;就需要对安装路径做一下调整&#xff0c;其余都是下一步默认安装的…...

Pinia 踩坑记录

1、子store中如何使用router 以user.ts 这个store为例 错误写法 // 说明&#xff1a;不能使用插件实例化router&#xff0c;否则获取不到router的函数 // 错误写法如下&#xff1a;import { useRouter } from "vue-router"actions:{login(){const router useRout…...

在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口)

在ASP.NET MVC中使用JQuery提供的弹出窗口&#xff08;模态窗口&#xff09; 原理 使用<div>图层灵活显示在浏览器的任何位置。默认情况下指定<div>不可见 引用 样式表 在JQuery的官方网站可以下载对应的css样式表。打开官网的样例页。 找到样式表引用路径 …...

基本工具配置

github加速 github.ur1.fun java # ubuntu20.04 安装 openjdk-17-jdk sudo apt install openjdk-17-jdk java -version javac -version which java参考 openjdk gradle换源 修改gradle-wrapper.properties distributionBaseGRADLE_USER_HOME distributionPathwrapper/dis…...

计算机网络——应用层(3)

计算机网络——应用层&#xff08;3&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 点对点&#xff08;P2P&#xff09;P2P网络一般用途优点缺点总结 套接字编程基本步骤UDP套接字TCP套接字基本步骤 二者对比 小程一言 我的计算机网络专栏&#xff0c;是自…...

配置ssh实现互相免密登陆

一、实验要求 通过两台linux主机 配置ssh 实现互相免密登陆 的操作 二、实验思路 免密登录我们可以理解为使用公钥登录&#xff0c;这里分别使用两台主机&#xff08;client&#xff09;和&#xff08;server&#xff09;作为实验主机。 首先让client免密登录server&#x…...

【UEFI基础】EDK网络框架(ARP)

ARP ARP协议说明 从这里开始涉及到的网络协议都是比较通用的了&#xff0c;在一般的TCP/IP四层模型中都能够看到这些内容&#xff0c;不过这里主要介绍的还是其在BIOS下的实现&#xff0c;但是在此之前还是需要先说明ARP的作用。 ARP的全称是Address Resolution Protocol&am…...

Linux进阶课:目录(文件夹)与文件操作

1、ls与cat的区别是是什么&#xff1f; 答&#xff1a;ls命令的含义是list&#xff0c;显示当前目录中内容。不加参数时它显示当前目录中除隐藏文件外的所有文件及目录的名字。 cat命令是linux下的一个文本输出命令&#xff0c;通常是用于查看某个文件的内容的。 2、[abc]这个…...

Flink自定义Source模拟数据流

maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…...

[易语言]使用易语言部署工业级人脸检测模型

【框架地址】 https://github.com/ShiqiYu/libfacedetection 【算法介绍】 Libfacedetection是一个开源的计算机视觉库&#xff0c;主要用于实时的人脸检测。它利用深度学习技术&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;实现了高精度的脸部定位…...

2024年海外推广怎么做?

要说如何做海外推广&#xff0c;绝大多数的外贸小伙伴都能说上一些&#xff0c;但是大部分人对于推广系统知识略知一二&#xff0c;没有构建一个系统化的知识框架。 海外推广的几大步骤 1.定策略 做海外推广前&#xff0c;我们需要制定一套营销策略&#xff0c;需要去定义一…...

Redis分布式锁--java实现

文章目录 Redis分布式锁方案&#xff1a;SETNX EXPIRE基本原理比较好的实现会产生四个问题 几种解决原子性的方案方案&#xff1a;SETNX value值是&#xff08;系统时间过期时间&#xff09;方案&#xff1a;使用Lua脚本(包含SETNX EXPIRE两条指令)方案&#xff1a;SET的扩展…...

好消息,Linux Kernel 6.7正式发布!

据有关资料显示&#xff0c;该版本是有史以来合并数最多的版本之一&#xff0c;包含 17k 个非合并 commit&#xff0c;实际合并的超过1K个。 那么该版本主要有哪边变化呢&#xff1f;下面我来一一列举一下&#xff1a; Bcachefs文件系统已被合并到主线内核&#xff0c;这是一款…...

【k8s】Kubernetes 声明式 API、命令式

1. 资源管理方式&#xff1a; 1>. 命令式对象管理∶直接使用命令去操作kubernetes资源 kubectl run nginx-pod --imagenginx:1.17.1 --port802>. 命令式对象配置∶通过命令配置和配置文件去操作kubernetes资源 kubectl create/patch -f nginx-pod.yaml3>. 声明式对…...

解锁营销新高度:幽灵鲨CRM推广平台线索对接功能详解

数字营销时代&#xff0c;线索对接是推动业务增长的关键。你是否为线索分布在不同的平台而来回切换&#xff1f;你是否为无法及时联系客户而错失商机&#xff1f;幽灵鲨CRM系统作为一款领先的客户关系管理解决方案&#xff0c;不仅实现了对主流推广平台的全面对接&#xff0c;更…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...