将springBoot项目做成一键安装的exe文件

使用到的工具

NSIS

NSIS(Nullsoft Scriptable Install System),即脚本安装系统,是一个开源且免费的工具,主要用于构建Windows平台下的安装包(安装程序),NSIS能够创建具备安装、卸载、设置系统设置以及解压文件等基本功能的安装程序。NSIS是一个功能强大、灵活且易于使用的工具,它为Windows平台下的应用程序安装包制作提供了全面的解决方案。

Quick Batch File Compiler

Quick Batch File Compiler是一款功能强大的软件,其主要作用体现在将批处理文件(.bat、.cmd格式)转换为真正的可执行程序(.exe格式)。

批处理文件转exe:Quick Batch File Compiler能够将.bat或.cmd格式的批处理文件转换为.exe格式的可执行文件。这种转换使得原本只能通过双击运行或在命令行中执行的批处理文件,能够以更加用户友好的方式被执行,无需用户了解批处理文件的运行方式。

nssm

下载地址:https://nssm.cc/release/nssm-2.24.zip

NSSM(Non-Sucking Service Manager)是一个免费、开源的Windows服务管理工具,它的主要作用和功能是:

  • 用户将任何可执行文件(包括EXE、BAT脚本、Java JAR文件等)封装并注册为Windows系统服务。这意味着这些应用程序可以像系统服务一样,具备自动启动、后台运行、故障恢复等功能。
  • 通过封装为服务,应用程序可以获得更高的运行稳定性和可靠性,以及更好的系统集成能力。
  • 可通过图形化界面方式创建服务,也可编写bat脚本代码后执行脚本创建服务。

nssm的使用案例:

执行脚本,将脚本同级目录下的StartJar.exe可执行文件做成自启动服务

  1. 将nssm.exe文件放到脚本同级目录;
  2. 编写脚本代码:
    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    @echo off
    
    SETLOCAL EnableDelayedExpansion  
    
    :: 假设脚本和nssm.exe在同一目录下  
    set NSSM_PATH=%~dp0nssm.exe  
      
    :: 设置服务的名称和对应的可执行文件路径  
    set JAR_SERVICE_NAME=CAE_StartJar_Service
    set JAR_EXE_PATH=%~dp0StartJar.exe
    
    :: 停止JAR服务(如果正在运行),并删除服务
    net stop %JAR_SERVICE_NAME% 2>nul  
    if %ERRORLEVEL%==0 (  
        echo %JAR_SERVICE_NAME% 停止了.  
    )
    sc query %JAR_SERVICE_NAME% >nul 2>&1  
    if %ERRORLEVEL%==0 (  
        echo 正在删除服务 %JAR_SERVICE_NAME%...  
        sc delete %JAR_SERVICE_NAME%  
    )
    
    :: 安装服务  
    echo 开始安装服务...  
    "%NSSM_PATH%" install %JAR_SERVICE_NAME% "%JAR_EXE_PATH%"  
    
    :: 设置服务为自动启动  
    echo 设置服务为自动启动...  
    sc config %JAR_SERVICE_NAME% start= auto  
    
    :: 启动服务
    echo 启动服务...  
    net start %JAR_SERVICE_NAME%  
    
    ENDLOCAL
    
    echo.
    echo 安装完成
    :pause
  3. 执行脚本即可;

制作exe安装包

将需要的文件夹和文件放到my_caePackFile目录

jre是后端jar包的运行环境;

可将mysql的空的data文件夹替换成已有数据的data文件夹,mysql服务安装后就有了对应的数据库而不需要再次创建数据库;

编写redis的初始化脚本,exe安装时会执行该脚本将redis做成自启动服务:

还需包含后端jar包、前端nginx、说明文档等;

编写各脚本

安装脚本:

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
@echo off

echo ****************************************
echo.
echo 开始安装环境,请不要关闭窗口
echo.
echo 正在以管理员身份安装运行
echo.
echo ****************************************
echo.


rem **************安装mysql*****************
echo.
echo 安装MYSQL

call %~dp0%mysql\mysql_init.bat

echo.
echo MYSQL安装完成

rem ***************安装缓存服务***************
echo.
echo 开始安装缓存服务

call %~dp0%redis\redis_init.bat

echo.
echo 缓存服务安装完成

rem ***************重新创建jar、nginx、form对应的自启动服务,并启动***************
SETLOCAL EnableDelayedExpansion  
  
:: 假设脚本和nssm.exe在同一目录下  
set NSSM_PATH=%~dp0nssm.exe  
  
:: 设置服务的名称和对应的可执行文件路径  
set JAR_SERVICE_NAME=CAE_StartJar_Service
set JAR_EXE_PATH=%~dp0StartJar.exe
  
set NGINX_35695_SERVICE_NAME=CAE_Nginx_35695_Service
set NGINX_35695_EXE_PATH=%~dp0nginx\nginx_35695.exe
  
set NGINX_35697_SERVICE_NAME=CAE_Nginx_35697_Service
set NGINX_35697_EXE_PATH=%~dp0form\nginx_35697.exe
  
:: 停止并删除已存在的服务  
echo 停止并删除已存在的服务...  
  
:: 停止JAR服务(如果正在运行),并删除服务
net stop %JAR_SERVICE_NAME% 2>nul  
if %ERRORLEVEL%==0 (  
    echo %JAR_SERVICE_NAME% 停止了.  
)
sc query %JAR_SERVICE_NAME% >nul 2>&1  
if %ERRORLEVEL%==0 (  
    echo 正在删除服务 %JAR_SERVICE_NAME%...  
    sc delete %JAR_SERVICE_NAME%  
)
  
:: 停止Nginx 35695服务(如果正在运行),并删除服务
net stop %NGINX_35695_SERVICE_NAME% 2>nul  
if %ERRORLEVEL%==0 (  
    echo %NGINX_35695_SERVICE_NAME% 停止了.  
)
sc query %NGINX_35695_SERVICE_NAME% >nul 2>&1  
if %ERRORLEVEL%==0 (  
    echo 正在删除服务 %NGINX_35695_SERVICE_NAME%...  
    sc delete %NGINX_35695_SERVICE_NAME%  
)
  
:: 停止Nginx 35697服务(如果正在运行),并删除服务
net stop %NGINX_35697_SERVICE_NAME% 2>nul  
if %ERRORLEVEL%==0 (  
    echo %NGINX_35697_SERVICE_NAME% 停止了.  
)
sc query %NGINX_35697_SERVICE_NAME% >nul 2>&1  
if %ERRORLEVEL%==0 (  
    echo 正在删除服务 %NGINX_35697_SERVICE_NAME%...  
    sc delete %NGINX_35697_SERVICE_NAME%  
)
  
:: 安装服务  
echo 开始安装服务...  
"%NSSM_PATH%" install %JAR_SERVICE_NAME% "%JAR_EXE_PATH%"  
"%NSSM_PATH%" install %NGINX_35695_SERVICE_NAME% "%NGINX_35695_EXE_PATH%"  
"%NSSM_PATH%" install %NGINX_35697_SERVICE_NAME% "%NGINX_35697_EXE_PATH%"  
  
:: 设置服务为自动启动  
echo 设置服务为自动启动...  
sc config %JAR_SERVICE_NAME% start= auto  
sc config %NGINX_35695_SERVICE_NAME% start= auto  
sc config %NGINX_35697_SERVICE_NAME% start= auto  
  
:: 启动服务
echo 启动服务...  
net start %JAR_SERVICE_NAME%  
net start %NGINX_35695_SERVICE_NAME%  
net start %NGINX_35697_SERVICE_NAME%  
  
echo 所有服务已被安装,并设置成自动启动,并已经启动成功。  
ENDLOCAL



echo.
echo 安装完成
:pause

该脚本通过nssm.exe会将后端、前端做成自启动服务。

启动后端jar包的脚本:

@echo off

:: 启动 Java 应用程序
"%~dp0jre\bin\javaw.exe" -Dfile.encoding=UTF-8 -jar "%~dp0wcat-manage-admin-1.0.1-SNAPSHOT.jar"

启动该系统(前端、后端)的脚本:

rem 该脚本暂未使用,已在start-browser.bat中启动服务


@echo off

title CAE

rem ***************启动jar、nginx、form对应的自启动服务***************
set JAR_SERVICE_NAME=CAE_StartJar_Service
set NGINX_35695_SERVICE_NAME=CAE_Nginx_35695_Service
set NGINX_35697_SERVICE_NAME=CAE_Nginx_35697_Service

set port=100
for /f "tokens=5" %%a in ('netstat /ano ^| findstr 35696') do (
	set port=%%a
)

if %port%==100 (
	echo.
	echo 后台服务启动中...
	net start %JAR_SERVICE_NAME% 
	timeout /nobreak /t 30
)

echo.
echo 表单服务启动中...
net start %NGINX_35697_SERVICE_NAME%  

echo.
echo 前台服务启动中...
net start %NGINX_35695_SERVICE_NAME%  

卸载脚本:

@echo off
cd /d "%~dp0%"
echo 关闭后台服务中...

REM 停止和卸载名为 mysql_wcat、redis_cae 的服务
sc stop mysql_cae
sc delete mysql_cae

sc stop redis_cae
sc delete redis_cae

rem ***************删除jar、nginx、form对应的自启动服务***************
set JAR_SERVICE_NAME=CAE_StartJar_Service
set NGINX_35695_SERVICE_NAME=CAE_Nginx_35695_Service
set NGINX_35697_SERVICE_NAME=CAE_Nginx_35697_Service
 
echo 停止并删除已存在的服务...
:: 停止JAR服务(如果正在运行),并删除服务
net stop %JAR_SERVICE_NAME% 2>nul  
if %ERRORLEVEL%==0 (  
    echo %JAR_SERVICE_NAME% 停止了.  
)
sc query %JAR_SERVICE_NAME% >nul 2>&1  
if %ERRORLEVEL%==0 (  
    echo 正在删除服务 %JAR_SERVICE_NAME%...  
    sc delete %JAR_SERVICE_NAME%  
)
  
:: 停止Nginx 35695服务(如果正在运行),并删除服务
net stop %NGINX_35695_SERVICE_NAME% 2>nul  
if %ERRORLEVEL%==0 (  
    echo %NGINX_35695_SERVICE_NAME% 停止了.  
)
sc query %NGINX_35695_SERVICE_NAME% >nul 2>&1  
if %ERRORLEVEL%==0 (  
    echo 正在删除服务 %NGINX_35695_SERVICE_NAME%...  
    sc delete %NGINX_35695_SERVICE_NAME%  
)
  
:: 停止Nginx 35697服务(如果正在运行),并删除服务
net stop %NGINX_35697_SERVICE_NAME% 2>nul  
if %ERRORLEVEL%==0 (  
    echo %NGINX_35697_SERVICE_NAME% 停止了.  
)
sc query %NGINX_35697_SERVICE_NAME% >nul 2>&1  
if %ERRORLEVEL%==0 (  
    echo 正在删除服务 %NGINX_35697_SERVICE_NAME%...  
    sc delete %NGINX_35697_SERVICE_NAME%  
)


REM ***************关闭 Java 程序***************
taskkill /f /im javaw.exe /t

REM 关闭所有以 nginx 开头的进程
for /f "tokens=2" %%a in ('tasklist ^| findstr /i "nginx"') do taskkill /f /pid %%a

echo 所有后台服务已关闭

将bat脚本编译成exe可执行文件

用Quick Batch File Compiler工具打开bat脚本文件,在嵌入文件中设置图表和管理员权限,点击构建生成exe可执行文件

生成的部分可执行会被360报木马病毒的解决办法:

360软件开放平台网站提交审核,也可在360弹出框右上角点击误报反馈

提交后,等一天左右,就不会再报病毒了。

将制作好的exe文件放到my_caePackFile目录。

制作安装包

文件--新建脚本:向导,安装提示填写信息和引入以上的文件和文件夹,最后保存为packConfig.nsi文件。

双击该文件即可生成安装包文件CAESetup.exe。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值