Files
CN_Tool_client/build/upgrade.bat

254 lines
7.5 KiB
Batchfile
Raw Normal View History

2026-04-13 17:32:58 +08:00
@echo off
chcp 65001 >nul
setlocal
echo ========================================
echo CN_Tool 升级工具
echo ========================================
echo.
REM 检查并创建 upgrade 目录
if not exist upgrade (
mkdir upgrade
echo 【首次使用】已自动创建 upgrade 目录
echo.
echo 请将升级文件放入 upgrade 目录:
echo - app.asar + app.asar.unpacked\ (前端升级包,必须成套放入)
echo - entrance.jar (后端升级包)
echo.
echo 放置完成后,重新运行本脚本即可升级
echo.
pause
exit /b 0
)
REM 检查升级文件状态
set "hasFrontendAsar=0"
set "hasFrontendUnpacked=0"
set "upgradeFrontend=0"
set "upgradeBackend=0"
set "frontendUpgraded=0"
if exist upgrade\app.asar set "hasFrontendAsar=1"
if exist upgrade\app.asar.unpacked set "hasFrontendUnpacked=1"
if exist upgrade\entrance.jar set "upgradeBackend=1"
if %hasFrontendAsar%==1 if %hasFrontendUnpacked%==1 (
set "upgradeFrontend=1"
)
if %hasFrontendAsar%==1 if %hasFrontendUnpacked%==0 (
echo 【错误】前端升级包不完整!
echo.
echo 当前仅检测到upgrade\app.asar
echo 前端升级必须同时提供以下两个内容:
echo - upgrade\app.asar
echo - upgrade\app.asar.unpacked\
echo.
pause
exit /b 1
)
if %hasFrontendAsar%==0 if %hasFrontendUnpacked%==1 (
echo 【错误】前端升级包不完整!
echo.
echo 当前仅检测到upgrade\app.asar.unpacked\
echo 前端升级必须同时提供以下两个内容:
echo - upgrade\app.asar
echo - upgrade\app.asar.unpacked\
echo.
pause
exit /b 1
)
if %upgradeFrontend%==0 if %upgradeBackend%==0 (
echo 【提示】upgrade 目录为空!
echo.
echo 请将升级文件放入 upgrade 目录:
echo - app.asar + app.asar.unpacked\ (前端升级包,必须成套放入)
echo - entrance.jar (后端升级包)
echo.
echo 放置完成后,重新运行本脚本即可升级
echo.
pause
exit /b 0
)
echo 【检测到升级文件】
if %upgradeFrontend%==1 (
echo - 前端升级: upgrade\app.asar + upgrade\app.asar.unpacked\
)
if %upgradeBackend%==1 (
echo - 后端升级: upgrade\entrance.jar
)
echo.
echo 【重要提示】
echo 1. 升级前会自动备份当前前后端程序文件
echo 2. 如升级失败可运行 rollback.bat 回滚前后端程序文件
echo 3. 数据库请先使用 Navicat 或其他工具手动导出 SQL 备份
echo.
pause
echo.
echo [1/5] 停止 CN_Tool 进程...
taskkill /F /IM CN_Tool.exe 2>nul
if %errorlevel% equ 0 (
echo CN_Tool 已停止
timeout /t 2 /nobreak >nul
) else (
echo CN_Tool 未运行
)
echo.
echo [2/5] 备份当前版本(用于回滚)...
if not exist backup mkdir backup
REM 备份前端(仅在执行前端升级时)
if %upgradeFrontend%==1 (
if exist resources\app.asar (
echo 正在备份前端 app.asar...
copy /Y resources\app.asar backup\app.asar >nul 2>&1
if %errorlevel% equ 0 (
echo app.asar 备份完成
) else (
echo app.asar 备份失败
pause
exit /b 1
)
)
if exist resources\app.asar.unpacked (
echo 正在备份前端 app.asar.unpacked...
if exist backup\app.asar.unpacked (
rmdir /s /q backup\app.asar.unpacked 2>nul
)
xcopy resources\app.asar.unpacked backup\app.asar.unpacked\ /E /I /Y /Q >nul 2>&1
if %errorlevel% equ 0 (
echo app.asar.unpacked 备份完成
) else (
echo app.asar.unpacked 备份失败
pause
exit /b 1
)
)
)
REM 备份后端(仅在执行后端升级时)
if %upgradeBackend%==1 if exist resources\extraResources\java\entrance.jar (
echo 正在备份后端...
copy /Y resources\extraResources\java\entrance.jar backup\entrance.jar >nul 2>&1
if %errorlevel% equ 0 (
echo 后端备份完成
) else (
echo 后端备份失败
pause
exit /b 1
)
)
echo.
echo [3/5] 记录版本信息...
if not exist backup\version.txt (
echo 备份时间: %date% %time% > backup\version.txt
echo 升级前版本备份 >> backup\version.txt
) else (
echo 上次备份时间: %date% %time% >> backup\version.txt
)
echo 版本信息已记录
echo.
echo [4/5] 升级前端...
if %upgradeFrontend%==1 (
echo 正在替换 app.asar...
copy /Y upgrade\app.asar resources\app.asar >nul 2>&1
if %errorlevel% equ 0 (
echo app.asar 升级完成
) else (
echo app.asar 升级失败,正在回滚...
if exist backup\app.asar (
copy /Y backup\app.asar resources\app.asar >nul 2>&1
)
echo 已回滚到升级前版本
pause
exit /b 1
)
echo 正在替换 app.asar.unpacked...
if exist resources\app.asar.unpacked (
rmdir /s /q resources\app.asar.unpacked 2>nul
)
xcopy upgrade\app.asar.unpacked resources\app.asar.unpacked\ /E /I /Y /Q >nul 2>&1
if %errorlevel% equ 0 (
echo app.asar.unpacked 升级完成
set "frontendUpgraded=1"
) else (
echo app.asar.unpacked 升级失败,正在回滚整个前端...
if exist backup\app.asar (
copy /Y backup\app.asar resources\app.asar >nul 2>&1
)
if exist backup\app.asar.unpacked (
rmdir /s /q resources\app.asar.unpacked 2>nul
xcopy backup\app.asar.unpacked resources\app.asar.unpacked\ /E /I /Y /Q >nul 2>&1
)
echo 已回滚到升级前版本
pause
exit /b 1
)
) else (
echo 无前端升级包,跳过
)
echo.
echo [5/5] 升级后端...
if %upgradeBackend%==1 (
echo 正在替换 JAR 文件...
copy /Y upgrade\entrance.jar resources\extraResources\java\entrance.jar >nul 2>&1
if %errorlevel% equ 0 (
echo 后端升级完成
) else (
echo 后端升级失败,正在回滚...
if exist backup\entrance.jar (
copy /Y backup\entrance.jar resources\extraResources\java\entrance.jar >nul 2>&1
)
if %frontendUpgraded%==1 (
if exist backup\app.asar (
copy /Y backup\app.asar resources\app.asar >nul 2>&1
)
if exist backup\app.asar.unpacked (
rmdir /s /q resources\app.asar.unpacked 2>nul
xcopy backup\app.asar.unpacked resources\app.asar.unpacked\ /E /I /Y /Q >nul 2>&1
)
)
echo 已回滚到升级前版本
pause
exit /b 1
)
) else (
echo 无后端升级包,跳过
)
echo.
if not exist logs mkdir logs
echo ========================================== >> logs\upgrade.log
echo 升级时间: %date% %time% >> logs\upgrade.log
if %upgradeFrontend%==1 (
echo 升级内容: 前端 >> logs\upgrade.log
)
if %upgradeBackend%==1 (
echo 升级内容: 后端 >> logs\upgrade.log
)
echo 数据库处理: 请手动导出/导入 SQL >> logs\upgrade.log
echo ========================================== >> logs\upgrade.log
echo ========================================
echo 升级完成!
echo ========================================
echo.
echo 【提示】
echo 1. 如需回滚,请运行 rollback.bat
echo 2. 数据库如需恢复,请手动执行之前导出的 SQL
echo 3. 升级文件已使用,可删除 upgrade 目录
echo.
echo 您现在可以启动 CN_Tool 应用。
echo.
pause