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 创建一键安装程序 分为两步
- 下载 NSIS
- 编写 一键安装代码
文件夹目录示例
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