NSIS 创建一键安装程序

server/2025/1/20 14:02:24/

nsis 安装redis 、mysql 、jdk navicat、 notepad++、

环境变量只能设置一次 ,多次 只有最后一次生效

; 函数:检查目录是否已在 PATH 中
Function setPath; 首先获取当前的 PATH 环境变量ReadEnvStr $0 PATH; 检查是否成功读取 PATH 环境变量StrCmp $0 "" 0 +3MessageBox MB_OK "未能成功读取 PATH 环境变量。"Abort; 定义 MySQL 的 bin 目录StrCpy $1 "$INSTDIR\MySql\bin"; 定义 JDK 的 bin 目录StrCpy $2 "$INSTDIR\JAVA\jdk\bin"; 拼接新的 PATH 环境变量StrCpy $3 "$0;$1;$2"; 配置 PATH 环境变量ExecWait 'setx PATH "$3" /M'FunctionEnd

使用NSIS 创建一键安装程序 分为两步

  1. 下载 NSIS
  2. 编写 一键安装代码

文件夹目录示例
在这里插入图片描述1.20 更新

; 请求管理员权限运行安装程序
RequestExecutionLevel admin; 该脚本使用 HM VNISEdit 脚本编辑器向导产生; 安装程序初始定义常量
!define PRODUCT_NAME "UTZE一键安装"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "ustze"SetCompressor lzma; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
!include "MUI.nsh"; MUI 预定义常量
!define MUI_ABORTWARNING
!define MUI_ICON "C:\Users\Administrator\Desktop\bitbug_favicon.ico"; 欢迎页面
!insertmacro MUI_PAGE_WELCOME
; 组件选择页面
!insertmacro MUI_PAGE_COMPONENTS
; 安装目录选择页面
!insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安装完成页面
!insertmacro MUI_PAGE_FINISH; 安装卸载过程页面
!insertmacro MUI_UNPAGE_INSTFILES; 安装界面包含的语言设置
!insertmacro MUI_LANGUAGE "SimpChinese"; 安装预释放文件
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; ------ MUI 现代界面定义结束 ------Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "ustze_install.exe"
InstallDir "D:\KDZT"
ShowInstDetails show
ShowUnInstDetails show; 引入所需的 NSIS 库
!include "FileFunc.nsh"
!include "LogicLib.nsh"; 安装 360zip 的部分
Section "安装 360压缩"; 设置 MySQL 的输出路径SetOutPath $INSTDIR\360zip; 复制 360zip 安装文件到安装目录File /r "360zip\*.*"; 运行 JDK 安装程序ExecWait '"$INSTDIR\360zip\360zip_setup.exe" /s'SectionEnd; 安装 notepad 的部分
Section "安装 notepad++"
; 设置 notepad 的输出路径
SetOutPath $INSTDIR\notepad; 复制 notepad 安装文件到安装目录File /r "notepad\*.*"; 运行 JDK 安装程序ExecWait '"$INSTDIR\notepad\Notepad8.1.9.exe" /s'SectionEnd; 安装 Navicat15 的部分
Section "安装 Navicat15"
; 设置 Navicat15 的输出路径
SetOutPath $INSTDIR\Navicat15; 复制 Navicat15 安装文件到安装目录File /r "Navicat15\*.*"; 运行 JDK 安装程序ExecWait '"$INSTDIR\Navicat15\navicat150_premium_cs_x64.exe" /s'SectionEnd; 安装 resp 的部分
Section "安装 Reiis桌面工具"
; 设置 MySQL 的输出路径
SetOutPath $INSTDIR\resp; 复制 resp 安装文件到安装目录File /r "resp\*.*"; 运行 resp 安装程序ExecWait '"$INSTDIR\resp\RedisFront_1.0.7.exe" /s'SectionEnd; 安装 JDK 的部分
Section "安装 JAVA"; 设置 JDK 的输出路径SetOutPath $INSTDIR\JAVA; 假设你的 JDK 免安装文件在与 NSIS 脚本相同的目录中名为 JAVA\jdk; 复制 JDK 免安装文件到安装目录File /r "JAVA\*.*"; 配置 JAVA_HOME 环境变量ExecWait 'setx JAVA_HOME "$INSTDIR\JAVA\jdk" /M'; 配置 PATH 环境变量Call setPath; 显示 JDK 安装完成消息MessageBox MB_OK "JDK 已安装,环境变量已配置。"
SectionEnd; 函数:检查目录是否已在 PATH 中
Function setPath; 首先获取当前的 PATH 环境变量ReadEnvStr $0 PATH; 检查是否成功读取 PATH 环境变量StrCmp $0 "" 0 +3MessageBox MB_OK "未能成功读取 PATH 环境变量。"Abort; 定义 MySQL 的 bin 目录StrCpy $1 "$INSTDIR\MySql\bin"; 定义 JDK 的 bin 目录StrCpy $2 "$INSTDIR\JAVA\jdk\bin"; 拼接新的 PATH 环境变量StrCpy $3 "$0;$1;$2"; 配置 PATH 环境变量ExecWait 'setx PATH "$3" /M'FunctionEnd; 安装部分
Section "安装 Redis"SetOutPath $INSTDIR\Redis; 复制 Redis 文件(假设 Redis 安装文件在 RedisFiles 目录下)File /r "Redis\*.*"SetOverwrite ifnewer; 安装 Redis 服务ExecWait '"$INSTDIR\Redis\redis-server.exe" --service-install "$INSTDIR\Redis\redis.windows-service.conf" --service-name "Redis" --loglevel verbose'; 启动 Redis 服务ExecWait '"$SYSDIR\sc.exe" start Redis'; 显示成功信息MessageBox MB_OK|MB_ICONINFORMATION "Redis 服务已成功安装并启动。"
SectionEndSection "安装与配置MySQL"; 设置输出路径为安装目录SetOutPath $INSTDIR\MySql; 假设已经将免安装版MySQL文件预先解压到某个目录,这里直接复制到安装目录File /r "mysql-5.7.44\*" ; 配置 MYSQL_HOME 环境变量ExecWait 'setx MYSQL_HOME "$INSTDIR\MySql" /M'; 安装服务	ExecWait '"$INSTDIR\MySql\bin\mysqld" --install MySQL --defaults-file="$INSTDIR\MySql\my.ini"'Pop $0MessageBox MB_OK "创建 MySQL 服务返回: $0" ; 显示返回值ExecWait '"net" start MySQL'Pop $0MessageBox MB_OK "启动 MySQL 服务返回: $0" ; 显示返回值; 创建数据库 执行sql文件Call CreateMySQLDatabase
SectionEnd; 首先定义所需的变量
!define MYSQL_USER "root"
!define MYSQL_PASSWORD "kdzt123456."
!define MYSQL_DATABASE "kj88data"Function CreateMySQLDatabase; 执行创建数据库的命令,使用!define 定义的变量ExecWait '"$INSTDIR\MySql\bin\mysql.exe" -u "${MYSQL_USER}" --password="${MYSQL_PASSWORD}" -e "CREATE DATABASE IF NOT EXISTS `${MYSQL_DATABASE}`;"' $0MessageBox MB_OK "创建数据库 服务返回: $0" ; 显示返回值; 复制 kdzt.sql 文件到相应位置File "kdzt.sql"; 执行 SQL 脚本文件ExecWait '"cmd.exe" /c "$INSTDIR\MySql\bin\mysql.exe" -u  "${MYSQL_USER}" --password="${MYSQL_PASSWORD}" --database="${MYSQL_DATABASE}"  < ""$INSTDIR\MySql\kdzt.sql"'
FunctionEnd	; 安装函数
Function Kuangya; 设置 JDK 的输出路径
SetOutPath $INSTDIR\prod-api; 假设你的 JDK 免安装文件在与 NSIS 脚本相同的目录中名为 JAVA\jdk; 复制 JDK 免安装文件到安装目录File /r "prod-api\*.*"ExecWait '$INSTDIR\prod-api\ruoyi-admin.exe install' $0${If} $0 != 0MessageBox MB_ICONSTOP|MB_OK "安装 nginx失败。"Abort${EndIf}
FunctionEnd; 安装节
Section "安装矿压5.2 "Call Kuangya
SectionEnd; 安装函数
Function nginxInstall; 设置 nginx 的输出路径
SetOutPath $INSTDIR\nginx; 复制 nginx 安装文件到安装目录File /r "nginx\*.*"ExecWait '$INSTDIR\nginx\nginx-server.exe install' $0${If} $0 != 0MessageBox MB_ICONSTOP|MB_OK "安装 nginx失败。"Abort${EndIf}
FunctionEnd; 安装节
Section "安装 nginx"Call nginxInstall
SectionEnd

mysql

在 NSIS (Nullsoft Scriptable Install System) 中使用 ExecWait 执行 SQL 文件脚本时,由于 ExecWait 不直接支持 shell 的输入重定向功能(如 < 符号) 使用 ExecWait ' "cmd.exe" /c

Section "安装与配置MySQL"Call CreateMySQLDatabaseSectionEnd; 首先定义所需的变量
!define MYSQL_USER "root"
!define MYSQL_PASSWORD "kdzt123456."
!define MYSQL_DATABASE "kj88data"Function CreateMySQLDatabase; 执行创建数据库的命令,使用!define 定义的变量ExecWait '"$INSTDIR\MySql\bin\mysql.exe" -u "${MYSQL_USER}" --password="${MYSQL_PASSWORD}" -e "CREATE DATABASE IF NOT EXISTS `${MYSQL_DATABASE}`;"'Pop $0MessageBox MB_OK "创建数据库 服务返回: $0" ; 显示返回值; 复制 kdzt.sql 文件到相应位置File "kdzt.sql"; 执行 SQL 脚本文件ExecWait ' "cmd.exe" /c  "$INSTDIR\MySql\bin\mysql.exe" -u  "${MYSQL_USER}" --password="${MYSQL_PASSWORD}"  < "kdzt.sql"'
FunctionEnd	

http://www.ppmy.cn/server/159901.html

相关文章

【C++】list容器

目录 学习途径 list的使用 list的一些构造 迭代器说明 接口使用 迭代器失效问题 list和vector对比 模拟实现list 迭代器的模拟&#xff08;重点&#xff09; List.h文件 学习途径 在学习list之前&#xff0c;我们可以查询一些相关文档来学习&#xff01; 文档详情&a…

Redis学习笔记1【数据类型和常用命令】

Redis学习笔记 基础语法 1.数据类型 String: 最基本的类型&#xff0c;可以存储任何数据&#xff0c;例如文本或数字。示例值为 hello world。Hash: 用于存储键值对&#xff0c;适合存储对象或结构体。示例值为 {"name": "Jack", "age": 21}。…

sourceinsight主题配置 sourceinsight绿色护眼主题下载

良好的开发环境对提高效率和舒适度至关重要。Source Insight 作为一种流行的源代码编辑器,用户可以根据个人需求更换主题。本文将为您介绍“sourceinsight主题配置 sourceinsight绿色护眼主题下载”,帮助您使用中这一功能,并提供绿色护眼主题的下载资源。 图1:Source Insig…

02内存结构篇(D2_剖析运行数据区)

目录 学习前言 一、程序计数器 1. 作用 2. 存储的数据 3. 异常 三、Java虚拟机栈 1. 栈帧 1.1. 局部变量表 存储内容 存储容量 其他 1.2. 操作数栈 作用 存储内容 存储容量 1.3. 动态连接 1.4. 方法返回 1.5. 附加信息 2. 栈异常 四、本地方法栈 1. 本地方…

Spring Web MVC综合案例

承接上篇文章——Spring Web MVC探秘&#xff0c;在了解Spring Web MVC背后的工作机制之后&#xff0c;我们接下来通过三个实战项目&#xff0c;来进一步巩固一下前面的知识。 一、计算器 效果展示&#xff1a;访问路径&#xff1a;http://127.0.0.1:8080/calc.html 前端代码&a…

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Transformer-LSTMNSGAII多目标优化算法&#xff0c;工艺参数优化、工程设计优化&#xff01;&#xff08;Matlab完整源码和数据&#xff09; Transformer-LSTM模型的架构&#xff1a;输入层&#xff1a;多个变量作…

模块化架构与微服务架构,哪种更适合桌面软件开发?

前言 在现代软件开发中&#xff0c;架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景&#xff0c;尤其在C#桌面软件开发领域&#xff0c;模块化架构往往更加具有实践性。本文将对这两种架构进行对比&#xff0…

Python----Python高级(模块与包,Python基本库)

一、模块 1.1、概念 就是一个包含了Python代码的以.py为后缀的Python文件&#xff0c;可以被其他 Python程序导入和使用&#xff0c;也可以自己独立执行&#xff0c;里面存放着的是一组相关的函 数或者类&#xff0c;比如查看关键字列表时导入的keyword模块。 1.2、作用 令Py…