C端打包修复不能在中文路径下启动的问题

This commit is contained in:
2026-04-02 20:51:19 +08:00
parent ad02fac4ff
commit 926b85bf8d
19 changed files with 474 additions and 373 deletions

View File

@@ -1,18 +0,0 @@
@echo off
chcp 65001 >nul
REM 获取当前批处理文件所在目录
cd /d "%~dp0"
REM 检查是否有管理员权限
net session >nul 2>&1
if %errorlevel% == 0 (
REM 已有管理员权限,直接启动
start "" "NPQS9100.exe"
exit
) else (
REM 没有管理员权限,使用 PowerShell 以管理员身份启动(隐藏窗口)
powershell -WindowStyle Hidden -Command "Start-Process '%~dp0NPQS9100.exe' -Verb RunAs"
exit
)

View File

@@ -4,27 +4,34 @@ NPQS-9100 升级与回滚说明
一、升级步骤(超简单!)
----------------------------------------
1. 双击 upgrade.bat首次会自动创建 upgrade 文件夹)
2. 将升级文件放入 upgrade/ 目录:
- app.asar (前端升级包 - 文件)
- app.asar.unpacked\ (前端升级包 - 文件夹
- entrance.jar (后端升级包)
3. 再次双击 upgrade.bat 开始升级
4. 等待完成后重启应用
1. 先使用 Navicat 或其他工具手动导出数据库 SQL 备份
2. 双击 upgrade.bat首次会自动创建 upgrade 文件夹)
3. 将升级文件放入 upgrade/ 目录:
- app.asar + app.asar.unpacked\ (前端升级包,必须成套放入
- entrance.jar (后端升级包)
4. 再次双击 upgrade.bat 开始升级
5. 等待完成后重启应用
补充说明:
- 可以只升级后端
- 可以只升级前端,但前端升级时必须同时提供:
app.asar
app.asar.unpacked\
- 数据库不由 upgrade.bat 自动备份,请务必提前手动导出 SQL
二、回滚步骤
----------------------------------------
如果升级后出现问题:
1. 双击 rollback.bat
2. 选择是否回滚数据库(谨慎!)
3. 等待完成后重启应用
1. 双击 rollback.bat(仅回滚前后端程序文件)
2. 等待完成后重启应用
3. 如需恢复数据库,请手动执行升级前导出的 SQL
三、重要提示
----------------------------------------
✓ 升级前会自动备份到 backup/ 目录
✓ 数据库会自动备份到 mysql/data_backup/
✓ 升级前会自动备份前后端程序文件到 backup/ 目录
✓ 升级日志保存在 logs/upgrade.log
✓ 多次升级时backup/ 保存最后一次升级前的版本
✓ 数据库备份与恢复由人工处理,不再由脚本自动执行
四、紧急情况
----------------------------------------
@@ -32,15 +39,15 @@ NPQS-9100 升级与回滚说明
【恢复前端】
copy /Y backup\app.asar resources\app.asar
rmdir /s /q resources\app.asar.unpacked
xcopy backup\app.asar.unpacked resources\app.asar.unpacked\ /E /I /Y
【恢复后端】
copy /Y backup\entrance.jar resources\extraResources\java\entrance.jar
【恢复数据库】(慎用!)
xcopy mysql\data_backup mysql\data\ /E /I /Y
【恢复数据库】
请使用 Navicat 或其他工具执行升级前导出的 SQL 备份
========================================
详细文档请参考doc/绿色包升级指南.md
如需完整技术文档,请联系交付方提供开发文档。
========================================

View File

@@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="NPQS9100"
type="win32"
/>
<description>NPQS-9100自动检测平台</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 and Windows 11 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>

View File

@@ -52,7 +52,8 @@ echo.
echo ========================================
echo 打包完成!
echo 输出目录: out\win-unpacked\
echo 最终交付目录: out\NPQS-9100\
echo 原始输出目录: out\win-unpacked\ (已自动重命名)
echo ========================================
echo.
pause

View File

@@ -63,7 +63,8 @@ echo.
echo ========================================
echo ✓ 打包完成!
echo 输出目录: out\win-unpacked\
echo 最终交付目录: out\NPQS-9100\
echo 原始输出目录: out\win-unpacked\ (已自动重命名)
echo ========================================
echo.
pause

View File

@@ -53,13 +53,13 @@ if exist "%LOGDIR%" (
)
echo.
echo [4] 检查 MySQL 服务...
sc query mysql9100 >nul 2>&1
if %errorlevel% equ 0 (
echo MySQL 服务存在
sc query mysql9100 | findstr "STATE"
echo [4] 检查当前运行模式...
echo 当前版本为绿色包进程模式,不使用 MySQL Windows 服务
if exist "mysql\my.ini" (
echo 检测到 MySQL 配置文件:
findstr /i "^port=" "mysql\my.ini"
) else (
echo MySQL 服务不存在
echo 尚未检测到 mysql\my.ini可能应用还未完整启动
)
echo.

View File

@@ -1,17 +1,19 @@
@echo off
chcp 65001 >nul
setlocal
echo ========================================
echo NPQS9100 回滚工具
echo ========================================
echo.
echo 【重要提示】
echo 本工具用于回滚上次升级的内容
echo 回滚后将恢复到升级前的状态
echo 本工具仅回滚前后端程序文件
echo 数据库不会由本脚本自动恢复
echo 如需恢复数据库,请手动执行之前导出的 SQL 备份
echo.
pause
echo.
echo [1/5] 停止 NPQS9100 进程...
echo [1/4] 停止 NPQS9100 进程...
taskkill /F /IM NPQS9100.exe 2>nul
if %errorlevel% equ 0 (
echo NPQS9100 已停止
@@ -21,7 +23,7 @@ if %errorlevel% equ 0 (
)
echo.
echo [2/5] 检查备份文件...
echo [2/4] 检查备份文件...
set hasBackup=0
if exist backup\app.asar (
@@ -39,23 +41,17 @@ if exist backup\entrance.jar (
set hasBackup=1
)
if exist mysql\data_backup (
echo 发现数据库备份
set hasBackup=1
)
if %hasBackup%==0 (
echo 未发现任何备份文件!
echo 未发现任何前后端备份文件!
echo 无法执行回滚操作
pause
exit /b 1
)
echo.
echo [3/5] 回滚前端...
echo [3/4] 回滚前端...
set frontendRollback=0
REM 回滚 app.asar
if exist backup\app.asar (
echo 正在恢复 app.asar...
copy /Y backup\app.asar resources\app.asar >nul 2>&1
@@ -69,7 +65,6 @@ if exist backup\app.asar (
)
)
REM 回滚 app.asar.unpacked
if exist backup\app.asar.unpacked (
echo 正在恢复 app.asar.unpacked...
if exist resources\app.asar.unpacked (
@@ -91,7 +86,7 @@ if %frontendRollback%==0 (
)
echo.
echo [4/5] 回滚后端...
echo [4/4] 回滚后端...
if exist backup\entrance.jar (
echo 正在恢复 JAR 文件...
copy /Y backup\entrance.jar resources\extraResources\java\entrance.jar >nul 2>&1
@@ -107,37 +102,11 @@ if exist backup\entrance.jar (
)
echo.
echo [5/5] 回滚数据库...
if exist mysql\data_backup (
echo 是否回滚数据库?(数据库回滚会丢失升级后的数据!)
echo [Y] 是 [N] 否
choice /C YN /N /M "请选择:"
if errorlevel 2 (
echo 已跳过数据库回滚
) else (
echo 正在回滚数据库...
if exist mysql\data (
rmdir /s /q mysql\data 2>nul
)
xcopy mysql\data_backup mysql\data\ /E /I /Y /Q >nul 2>&1
if %errorlevel% equ 0 (
echo 数据库已回滚
) else (
echo 数据库回滚失败
pause
exit /b 1
)
)
) else (
echo 无数据库备份,跳过
)
echo.
echo ========================================
echo 回滚完成!
echo ========================================
echo.
echo 如需恢复数据库,请手动执行之前导出的 SQL 备份。
echo 您现在可以启动 NPQS9100 了
echo.
pause

View File

@@ -1,5 +1,6 @@
@echo off
chcp 65001 >nul
setlocal
echo ========================================
echo NPQS9100 升级工具
echo ========================================
@@ -11,9 +12,8 @@ if not exist upgrade (
echo 【首次使用】已自动创建 upgrade 目录
echo.
echo 请将升级文件放入 upgrade 目录:
echo - app.asar (前端升级包 - 文件
echo - app.asar.unpacked\ (前端升级包 - 文件夹
echo - entrance.jar (后端升级包)
echo - app.asar + app.asar.unpacked\ (前端升级包,必须成套放入
echo - entrance.jar (后端升级包
echo.
echo 放置完成后,重新运行本脚本即可升级
echo.
@@ -21,19 +21,51 @@ if not exist upgrade (
exit /b 0
)
REM 检查是否有升级文件
set hasUpgrade=0
if exist upgrade\app.asar set hasUpgrade=1
if exist upgrade\app.asar.unpacked set hasUpgrade=1
if exist upgrade\entrance.jar set hasUpgrade=1
REM 检查升级文件状态
set "hasFrontendAsar=0"
set "hasFrontendUnpacked=0"
set "upgradeFrontend=0"
set "upgradeBackend=0"
set "frontendUpgraded=0"
if %hasUpgrade%==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 (前端升级包 - 文件
echo - app.asar.unpacked\ (前端升级包 - 文件夹
echo - entrance.jar (后端升级包)
echo - app.asar + app.asar.unpacked\ (前端升级包,必须成套放入
echo - entrance.jar (后端升级包
echo.
echo 放置完成后,重新运行本脚本即可升级
echo.
@@ -42,19 +74,22 @@ if %hasUpgrade%==0 (
)
echo 【检测到升级文件】
if exist upgrade\app.asar echo - 前端升级asar文件 upgrade\app.asar
if exist upgrade\app.asar.unpacked echo - 前端升级unpacked文件夹 upgrade\app.asar.unpacked\
if exist upgrade\entrance.jar echo - 后端升级: upgrade\entrance.jar
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. 数据库会自动备份到 mysql\data_backup\
echo 1. 升级前会自动备份当前前后端程序文件
echo 2. 如升级失败可运行 rollback.bat 回滚前后端程序文件
echo 3. 数据库请先使用 Navicat 或其他工具手动导出 SQL 备份
echo.
pause
echo.
echo [1/6] 停止 NPQS9100 进程...
echo [1/5] 停止 NPQS9100 进程...
taskkill /F /IM NPQS9100.exe 2>nul
if %errorlevel% equ 0 (
echo NPQS9100 已停止
@@ -64,63 +99,54 @@ if %errorlevel% equ 0 (
)
echo.
echo [2/6] 备份当前版本(用于回滚)...
echo [2/5] 备份当前版本(用于回滚)...
if not exist backup mkdir backup
REM 备份前端(app.asar 和 app.asar.unpacked
if exist resources\app.asar (
echo 正在备份前端 app.asar...
if not exist backup mkdir backup
copy /Y resources\app.asar backup\app.asar >nul 2>&1
if %errorlevel% equ 0 (
echo app.asar 备份完成
) else (
echo app.asar 备份失败
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
)
)
)
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 备份失败
)
)
REM 备份后端
if exist resources\extraResources\java\entrance.jar (
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 后端备份失败
)
)
REM 备份数据库
if exist mysql\data (
echo 正在备份数据库...
if exist mysql\data_backup (
rmdir /s /q mysql\data_backup 2>nul
)
xcopy mysql\data mysql\data_backup\ /E /I /Y /Q >nul 2>&1
if %errorlevel% equ 0 (
echo 数据库备份完成
) else (
echo 数据库备份失败,请手动备份后继续
pause
exit /b 1
)
)
echo.
echo [3/6] 记录版本信息...
echo [3/5] 记录版本信息...
if not exist backup\version.txt (
echo 备份时间: %date% %time% > backup\version.txt
echo 升级前版本备份 >> backup\version.txt
@@ -130,29 +156,22 @@ if not exist backup\version.txt (
echo 版本信息已记录
echo.
echo [4/6] 升级前端...
set frontendUpgraded=0
REM 升级 app.asar
if exist upgrade\app.asar (
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 升级完成
set frontendUpgraded=1
) else (
echo app.asar 升级失败,正在回滚...
if exist backup\app.asar (
copy /Y backup\app.asar resources\app.asar >nul 2>&1
echo 已回滚到升级前版本
)
echo 已回滚到升级前版本
pause
exit /b 1
)
)
REM 升级 app.asar.unpacked
if exist upgrade\app.asar.unpacked (
echo 正在替换 app.asar.unpacked...
if exist resources\app.asar.unpacked (
rmdir /s /q resources\app.asar.unpacked 2>nul
@@ -160,26 +179,27 @@ if exist upgrade\app.asar.unpacked (
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
set "frontendUpgraded=1"
) else (
echo app.asar.unpacked 升级失败,正在回滚...
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 已回滚到升级前版本
)
echo 已回滚到升级前版本
pause
exit /b 1
)
)
if %frontendUpgraded%==0 (
) else (
echo 无前端升级包,跳过
)
echo.
echo [5/6] 升级后端...
if exist upgrade\entrance.jar (
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 (
@@ -188,8 +208,17 @@ if exist upgrade\entrance.jar (
echo 后端升级失败,正在回滚...
if exist backup\entrance.jar (
copy /Y backup\entrance.jar resources\extraResources\java\entrance.jar >nul 2>&1
echo 已回滚到升级前版本
)
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
)
@@ -198,19 +227,17 @@ if exist upgrade\entrance.jar (
)
echo.
echo [6/6] 记录升级日志...
if not exist logs mkdir logs
echo ========================================== >> logs\upgrade.log
echo 升级时间: %date% %time% >> logs\upgrade.log
if exist upgrade\dist (
if %upgradeFrontend%==1 (
echo 升级内容: 前端 >> logs\upgrade.log
)
if exist upgrade\entrance.jar (
if %upgradeBackend%==1 (
echo 升级内容: 后端 >> logs\upgrade.log
)
echo 数据库处理: 请手动导出/导入 SQL >> logs\upgrade.log
echo ========================================== >> logs\upgrade.log
echo 升级日志已记录
echo.
echo ========================================
echo 升级完成!
@@ -218,10 +245,9 @@ echo ========================================
echo.
echo 【提示】
echo 1. 如需回滚,请运行 rollback.bat
echo 2. 升级文件已使用,可删除 upgrade 目录
echo 2. 数据库如需恢复,请手动执行之前导出的 SQL
echo 3. 升级文件已使用,可删除 upgrade 目录
echo.
echo 您现在可以启动 NPQS9100 应用。
echo.
pause

View File

@@ -3,18 +3,21 @@
## 使用方法
1. 将升级文件放入此目录:
- app.asar (前端升级包 - 文件)
- app.asar.unpacked/ (前端升级包 - 文件夹)
- app.asar + app.asar.unpacked/ (前端升级包,必须成套放入)
- entrance.jar (后端升级包)
2. 双击运行根目录的 upgrade.bat 脚本
2. 升级前先手动导出数据库 SQL 备份
3. 升级完成后重启应用
3. 双击运行根目录的 upgrade.bat 脚本
4. 升级完成后重启应用
## 注意事项
- 可以只放前端或只放后端,支持单独升级
- 可以只放后端,或放完整前端包,支持单独升级
- 如果升级前端,必须同时放入 app.asar 和 app.asar.unpacked/
- 升级前会自动备份到 backup/ 目录
- 如果升级失败,运行 rollback.bat 可回滚
- 数据库不由脚本自动备份,请手动导出/导入 SQL
- 如果升级失败,运行 rollback.bat 可回滚前后端程序文件
详细说明请参考README-升级回滚.txt
详细说明请参考根目录 README-升级回滚.txt