Files
CN_Tool_client/doc/CN_Tool绿色包完整指南.md
2026-04-13 17:32:58 +08:00

24 KiB
Raw Permalink Blame History

CN_Tool 绿色包完整指南

本指南包含绿色包的打包、使用、升级和维护的完整说明。


📋 目录


一、产品说明

📦 产品特性

绿色包是一个免安装便携版,包含:

  • 应用本体Electron + Vue 3
  • MySQL 数据库(免安装版,支持动态端口)
  • Java 运行环境JRE 8
  • Spring Boot 后端服务entrance.jar
  • 智能启动流程端口检测、Loading界面
  • 一键升级回滚机制

用户体验:解压即用,双击启动,无需任何配置


🎯 核心功能

1. 智能端口检测

  • MySQL 端口:从 3306 开始自动检测(最多 100 个)
  • Java 端口:从 18092 开始自动检测(最多 100 个)
  • 自动更新配置文件

2. 盘符自动识别

  • 程序目录为纯英文/ASCII路径时数据目录位于应用目录内的 CN_Tool_Data\
  • 程序目录包含中文或其他非 ASCII 字符时:自动切换到当前盘符根目录下的 CN_Tool_Runtime\
  • 自动创建所有必要的子目录

3. Loading 界面

  • 紫色渐变背景
  • 流畅的进度条动画0% → 100%
  • 实时状态文字更新
  • 显示检测到的端口号和数据目录路径

4. 热更新机制

  • 前端可独立升级
  • 后端可独立升级
  • 自动备份,支持一键回滚
  • 数据库数据完全保留

5. 简化配置管理

  • 基于环境变量的配置方案
  • 需要修改配置时重新打包前端upgrade.bat 升级)
  • 保证稳定性和可靠性

📁 目录结构

交付口径说明:

  • electron-builder 原始输出目录:out/win-unpacked
  • npm run build-w 脚本最终交付目录:out/CN_Tool
CN_Tool/                             # 绿色版目录(约 650-800 MB
├── CN_Tool.exe                        # 主程序(双击运行)⭐
├── upgrade.bat                         # 升级工具 ⭐
├── rollback.bat                        # 回滚工具 ⭐
├── 使用说明.txt                         # 使用手册
├── README-升级回滚.txt                  # 升级说明
├── upgrade/                            # 升级包目录(首次使用自动创建)
├── backup/                             # 自动备份目录
│   ├── app.asar                       # 前端主包备份
│   ├── app.asar.unpacked/             # 前端展开目录备份
│   ├── entrance.jar                   # 后端备份
│   └── version.txt                    # 版本记录
├── resources/
│   ├── app.asar                       # Electron 主代码(加密)
│   ├── app.asar.unpacked/
│   │   └── public/
│   │       └── dist/                  # 前端代码 ⭐ 可替换
│   └── extraResources/
│       ├── dll/
│       └── java/
│           ├── entrance.jar           # 后端 JAR ⭐ 可替换
│           ├── application.yml.template
│           └── application.yml        # 运行时生成
├── scripts/                           # 启动管理脚本(⚠️ 不要修改)
│   ├── config-generator.js
│   ├── java-runner.js
│   ├── mysql-process-manager.js
│   ├── port-checker.js
│   └── startup-manager.js
├── mysql/                             # MySQL 数据库
│   ├── bin/
│   ├── data/                          # 数据库数据 ⚠️ 不要动
│   ├── my.ini                         # 运行时生成
│   └── README.txt
├── jre/                               # Java 运行环境(⚠️ 不要修改)
│   ├── bin/
│   └── lib/
└── logs/                              # 应用日志
    ├── startup-YYYYMMDD.log
    └── upgrade.log

用户数据目录(首次运行自动创建):
- 程序目录为纯英文/ASCII路径时
  `应用目录\CN_Tool_Data\`
- 程序目录包含中文或其他非 ASCII 字符时:
  `X:\CN_Tool_Runtime\data\`          (X 是应用所在盘符)

用户数据目录内包含:
├── logs/                              # Spring Boot 日志
├── template/                          # 报告模板
├── report/                            # 生成的报告
└── data/                              # 应用数据

七、用户关心的文件(重要!)

📌 可以使用的工具

文件 功能 使用场景
CN_Tool.exe 主程序 日常启动
upgrade.bat 升级工具 收到升级包时使用
rollback.bat 回滚工具 升级后出问题时使用
使用说明.txt 使用手册 遇到问题时参考
README-升级回滚.txt 升级说明 升级前阅读

⚠️ 不要修改的文件/目录

路径 说明 误修改后果
resources/ 应用核心代码 应用无法启动
scripts/ 启动管理脚本 启动流程失败
jre/ Java 运行环境 Java 服务无法启动
mysql/bin/ MySQL 可执行文件 数据库无法启动
mysql/my.ini MySQL 配置 运行时自动生成,手动修改会被覆盖

📂 需要保护的数据

路径 说明 备份建议
应用目录\mysql\data/X:\CN_Tool_Runtime\mysql\data/ 数据库数据 ⚠️ 定期备份!
backup/ 升级备份 自动管理,无需手动操作
应用目录\CN_Tool_Data/X:\CN_Tool_Runtime\data/ 用户数据目录 包含日志、模板、报告

二、打包指南

🏗️ 打包步骤

步骤 1清理并打包

cd build
clean-and-build.bat

打包过程

  1. 停止 CN_Tool 进程
  2. 删除 out 目录
  3. 构建前端代码Vue 3
  4. 编译 Electron 主进程代码
  5. 复制 MySQL、JRE、Java 资源
  6. 先生成 out/win-unpacked,再自动重命名为最终交付目录 out/CN_Tool

等待时间:约 5-15 分钟


步骤 2测试运行

cd out\CN_Tool
CN_Tool.exe

观察

  • Loading 界面正常显示(不在任务栏显示)
  • 启动进度正常更新9个步骤
  • MySQL 自动启动
  • Spring Boot 连接成功
  • 顺利进入主界面

步骤 3压缩发布包

cd out
Compress-Archive -Path CN_Tool -DestinationPath "CN_Tool-v1.0.0-绿色版.zip" -Force

压缩后大小:约 350-450 MB


三、启动流程

🔄 完整启动流程

用户解压 zip 并双击 CN_Tool.exe
    ↓
显示 Loading 界面(不在任务栏显示)
    ↓
[0%] 正在初始化应用...
    ↓
[15%] 检测 MySQL 端口 (3306 → 3307 → ...)
    ├─ 找到可用端口(如 3307
    ↓
[30%] 启动 MySQL 数据库(端口 3307
    ├─ 首次运行:自动初始化数据库
    ├─ 自动设置 root 密码njcnpqs
    ├─ 自动授权 127.0.0.1 访问
    ↓
[45%] 等待 MySQL 就绪
    ├─ 监听端口是否打开
    ├─ 超时时间30 秒
    ↓
[60%] 检测 Java 端口 (18092 → 18093 → ...)
    ├─ 找到可用端口(如 18093
    ↓
[70%] 检测应用所在盘符并生成配置文件
    ├─ MySQL 连接localhost:3307
    ├─ MySQL 密码njcnpqs  ⭐ 自动写入
    ├─ Java 端口18093
    ├─ 数据路径:纯英文路径时为 `应用目录\CN_Tool_Data\`
    ├─ 数据路径:中文路径时为 `X:\CN_Tool_Runtime\data\`
    ├─ 创建所有必要目录logs、template、report、data
    ↓
[80%] 启动 Spring Boot 后端
    ├─ 使用内置 JRE 8
    ├─ 加载生成的配置文件
    ├─ 连接 MySQL 数据库
    ↓
[90%] 等待 Spring Boot 就绪
    ├─ 监听 18093 端口
    ├─ 超时时间60 秒
    ↓
[100%] 启动完成!
    ├─ 等待 1.5 秒显示完成状态
    ↓
销毁 Loading 窗口(使用 destroy() 确保完全释放)
    ↓
显示主应用界面任务栏只显示1个图标

预计启动时间

  • 首次运行30-45 秒(需初始化 MySQL
  • 后续启动15-25 秒

🚪 关闭流程

用户关闭应用点击X或托盘退出
    ↓
显示退出确认对话框
    ↓
用户确认退出
    ↓
停止 Spring Boot 进程通过PID和端口精确清理
    ↓
停止 MySQL 进程(随应用启动的 mysqld.exe
    ↓
清理资源
    ↓
应用退出

四、升级指南

🎯 升级流程概览

升级流程

1. 先手动导出数据库 SQL 备份
2. 双击 upgrade.bat首次自动创建 upgrade/ 目录)
3. 将升级包放入 upgrade/ 目录
4. 再次运行 upgrade.bat自动备份前后端程序文件 + 升级)
5. 重启应用测试

回滚流程

1. 双击 rollback.bat
2. 自动从 backup/ 恢复前后端程序文件
3. 如需恢复数据库,手动执行之前导出的 SQL
4. 重启应用

🔧 升级操作步骤

方法 1使用升级脚本推荐

第 1 步:准备升级包

  1. 先使用 Navicat 或其他工具手动导出数据库 SQL 备份
  2. 双击 upgrade.bat
  3. 脚本自动创建 upgrade/ 文件夹并提示
  4. 将升级文件放入 upgrade/ 目录:
    • app.asar + app.asar.unpacked/ - 前端升级包(可选,必须成套)
    • entrance.jar - 后端升级包(可选)
  5. 再次双击 upgrade.bat 开始升级

第 2 步:自动升级

脚本会自动:

  • 停止 CN_Tool 进程
  • 自动备份当前前后端程序文件到 backup/ 目录
  • 替换前端文件(如果有)
  • 替换后端 JAR如果有
  • 记录升级日志到 logs/upgrade.log

数据库说明:

  • ⚠️ 数据库不再由 upgrade.bat 自动备份
  • ⚠️ 升级前请务必手动导出 SQL 备份

第 3 步:重启应用

升级完成后,双击 CN_Tool.exe 启动应用。


方法 2手动升级

如果升级脚本失败,可以手动操作:

升级前端

taskkill /F /IM CN_Tool.exe
copy /Y upgrade\app.asar resources\app.asar
rmdir /s /q resources\app.asar.unpacked
xcopy upgrade\app.asar.unpacked resources\app.asar.unpacked\ /E /I /Y

升级后端

taskkill /F /IM CN_Tool.exe
copy /Y upgrade\entrance.jar resources\extraResources\java\entrance.jar

🔄 回滚操作

方法 1使用回滚脚本推荐

如果升级后出现问题,直接双击 rollback.bat

脚本会自动:

  • 停止 CN_Tool
  • 恢复前端(从 backup/app.asarbackup/app.asar.unpacked/
  • 恢复后端(从 backup/entrance.jar
  • 数据库由人工恢复,不再由脚本自动处理

方法 2手动回滚

# 恢复前端
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

# 恢复数据库
# 使用 Navicat 或其他工具执行升级前导出的 SQL 备份

📋 升级清单

升级类型 升级包来源 客户放置位置 最终替换位置
前端 out/CN_Tool/resources/app.asar + app.asar.unpacked/ upgrade/app.asar + upgrade/app.asar.unpacked/ resources/app.asar + resources/app.asar.unpacked/
后端 out/CN_Tool/resources/extraResources/java/entrance.jar upgrade/entrance.jar resources/extraResources/java/entrance.jar
数据库 手动导出的 SQL 备份 不放入升级包 需要时人工导入

🛠️ 开发者升级流程(完整版)

前端升级完整流程

# ============================================
# 开发侧操作
# ============================================

# 1⃣ 修改前端代码
# 编辑 frontend/src/ 下的任何文件

# 2⃣ 如需修改配置(可选)
# 编辑 frontend/.env
VITE_API_URL=http://192.168.1.100:18092  # 修改 API 地址

# 3⃣ 构建前端
npm run build-frontend

# 4⃣ 打包应用
npm run build-w
# 最终交付目录: out/CN_Tool/
# 原始输出目录: out/win-unpacked/(脚本会自动重命名)

# 5⃣ 准备升级包
# 从 out/CN_Tool/resources/ 复制以下文件:
#   - app.asar (文件)
#   - app.asar.unpacked/ (整个文件夹)
# 
# 压缩成: CN_Tool-前端-v1.0.1.zip

# 6⃣ 发给客户


# ============================================
# 客户侧操作
# ============================================

# 1⃣ 解压升级包
# 解压 CN_Tool-前端-v1.0.1.zip
# 得到:
#   - app.asar
#   - app.asar.unpacked/

# 2⃣ 复制到升级目录
# 将两个文件都放到CN_Tool/upgrade/
#   - upgrade/app.asar
#   - upgrade/app.asar.unpacked/

# 3⃣ 运行升级脚本
# 双击: upgrade.bat

# 4⃣ 重启应用
# 双击: CN_Tool.exe

后端升级完整流程

# ============================================
# 开发侧操作
# ============================================

# 1⃣ 获取新的 JAR 文件
# 从后端开发人员获取新版本的 entrance.jar

# 2⃣ 替换 JAR 文件
# 将新的 entrance.jar 复制到:
# build/extraResources/java/entrance.jar

# 3⃣ 打包升级包
# 直接压缩 entrance.jar 文件
# 重命名为: CN_Tool-后端-v1.0.1.zip

# 4⃣ 发给客户
# 发送 CN_Tool-后端-v1.0.1.zip


# ============================================
# 客户侧操作
# ============================================

# 1⃣ 解压升级包
# 解压 CN_Tool-后端-v1.0.1.zip
# 得到 entrance.jar 文件

# 2⃣ 复制到升级目录
# 将 entrance.jar 复制到:
# CN_Tool/upgrade/entrance.jar

# 3⃣ 运行升级脚本
# 双击: upgrade.bat

# 4⃣ 重启应用
# 双击: CN_Tool.exe

前后端同时升级

# 开发侧:准备升级包
CN_Tool-升级-v1.1.0.zip
├── app.asar              # 前端升级包(文件)
├── app.asar.unpacked/    # 前端升级包(文件夹)
└── entrance.jar          # 后端升级包

# 客户侧:复制到
CN_Tool/upgrade/
├── app.asar
├── app.asar.unpacked/
└── entrance.jar

# 运行 upgrade.bat 即可一次性升级前后端

五、测试清单

打包验证

  • out/CN_Tool 目录存在
  • 目录大小约 650-800 MB
  • CN_Tool.exe 存在
  • upgrade.bat 存在
  • rollback.bat 存在
  • 使用说明.txt 存在
  • README-升级回滚.txt 存在
  • mysql/ 目录完整
  • jre/ 目录完整

基础功能测试

  • 双击 CN_Tool.exe 能正常启动
  • Loading 界面正常显示
  • Loading 窗口不在任务栏显示
  • 进度条流畅更新0% → 100%
  • 状态文字正确显示
  • 主界面正常显示
  • 任务栏只有1个窗口预览

端口检测测试

  • 手动占用 3306应用自动使用 3307
  • 手动占用 18092应用自动使用 18093
  • Loading 界面显示检测到的端口号
  • 日志中显示正确的端口信息

MySQL 测试

  • MySQL 自动启动成功
  • 首次运行自动初始化数据库
  • 可以用 Navicat 连接密码njcnpqs
  • 可以从 127.0.0.1 连接(不报 1130 错误)
  • 数据库操作正常
  • 关闭应用后 MySQL 自动停止

Spring Boot 测试

  • 后端服务自动启动
  • 能连接到 MySQL不报密码错误
  • 日志无错误:"HikariPool-1 - Start completed"
  • API 接口正常响应
  • 关闭应用后 Java 进程停止

配置生成测试

  • application.yml 自动生成
  • MySQL 密码正确写入njcnpqs
  • MySQL 端口正确
  • Java 端口正确
  • 数据路径正确(对应盘符)

数据目录测试

  • 数据目录在正确的盘符下创建
  • 所有子目录都自动创建
  • 配置文件路径正确
  • 日志文件正常写入

便携性测试

  • 可以解压到任意目录运行
  • 可以移动到其他目录运行
  • 可以在不同电脑上运行
  • 可以在不同盘符上运行C/D/E...
  • 删除目录即可完全卸载
  • 压缩成 zip 后用户可正常解压使用

升级回滚测试

  • upgrade.bat 首次运行自动创建 upgrade/ 目录
  • upgrade.bat 检测到升级文件后正常升级
  • 升级前自动备份到 backup/ 目录
  • 升级前已手动导出数据库 SQL
  • 升级后应用正常运行
  • 升级后数据库数据保留
  • rollback.bat 能正确回滚前端
  • rollback.bat 能正确回滚后端
  • 如需恢复数据库,能手动导入 SQL
  • 回滚后应用恢复正常

性能测试

  • 首次启动 < 45 秒
  • 后续启动 < 30 秒
  • Loading 界面流畅无卡顿
  • 内存占用合理(< 1GB
  • CPU 占用正常

错误处理测试

  • 端口全部占用时显示友好错误
  • MySQL 启动失败时显示错误信息
  • Spring Boot 启动失败时不崩溃
  • 升级失败时自动回滚
  • 托盘图标显示正常
  • 退出确认对话框正常工作

六、常见问题

Q1: Loading 界面一直卡在某个步骤?

A: 查看日志定位问题:

C:\Users\[用户名]\AppData\Roaming\CN_Tool\logs\
├── 9100-YYYYMMDD.log          # 应用日志
├── 9100-core-YYYYMMDD.log     # 核心日志
└── 9100-error-YYYYMMDD.log    # 错误日志

常见原因:

  • MySQL 启动失败 → 检查端口是否可用
  • Java 启动失败 → 检查 JRE 是否完整
  • 配置生成失败 → 检查磁盘权限

Q2: 显示"无法找到可用端口"错误?

A:

  • 检查是否有大量端口被占用
  • 尝试关闭其他占用端口的程序
  • 或修改起始端口(见开发者指南)

Q3: MySQL 连接失败或提示 1130 错误?

A:

  • 确认 MySQL 已启动(任务管理器查看 mysqld.exe
  • 确认端口正确(看 Loading 界面显示的端口)
  • 确认密码正确njcnpqs已自动配置
  • 检查是否有杀毒软件拦截
  • 如有问题重启应用即可MySQL 会自动重新配置)

Q4: 后端 API 无法访问?

A:

  • 确认 Spring Boot 已启动
  • 确认端口正确(看 Loading 界面)
  • 检查防火墙设置

Q5: 打包后体积太大?

A: 预期体积:

  • 解压后650-800 MB
  • 压缩后 (zip)350-450 MB

主要组成:

  • 应用本体:~150 MB
  • MySQL 8.0~400 MB
  • JRE 8~100 MB

优化建议:

  • 考虑使用 7z 格式(压缩率更高)
  • 可以精简 MySQL 的不必要组件

Q6: 任务栏显示2个窗口预览

A: 已修复!现在 Loading 窗口使用 skipTaskbar: true,不会在任务栏显示。


Q7: 升级后前端显示旧版本?

A: 清除浏览器缓存或强制刷新Ctrl + F5


Q8: 升级后数据丢失?

A: 检查升级前是否已手动导出数据库 SQL 备份。如需恢复数据库,请使用 Navicat 或其他工具执行该 SQL 备份。


Q9: 升级脚本报错?

A

  1. 检查 upgrade 文件夹路径是否正确
  2. 手动执行升级步骤
  3. 查看 logs/upgrade.log 日志

Q10: 回滚后还是有问题?

A

  1. 检查 backup/ 目录是否有备份文件
  2. 查看 backup/version.txt 确认备份版本
  3. 手动执行前后端回滚步骤(参考本文档)
  4. 如问题与数据库有关,手动导入升级前导出的 SQL

Q11: 多次升级后backup 目录的内容是什么版本?

A: backup/ 目录保存的是最后一次升级前的版本(每次升级都会覆盖)


Q12: 点击 X 关闭后Java 进程还在运行?

A: 已修复!现在使用精确的进程清理机制:

  • 通过 PID 清理(如果有进程引用)
  • 通过端口号清理(精确定位)
  • 不会误杀 IDEA 等其他 Java 进程

Q13: 如何修改 API 或 WebSocket 地址?

A:

  1. 修改 frontend/.env 文件中的 VITE_API_URL
  2. 重新构建前端:npm run build-frontend
  3. public/dist/ 打包为升级包
  4. 使用 upgrade.bat 升级

示例

# frontend/.env
VITE_API_URL=http://192.168.1.100:18092

注意

  • 配置修改需要重新打包前端
  • 使用升级机制保证数据安全

Q14: 现在还需要安装或卸载 MySQL 服务吗?

A:

当前版本不需要。

当前版本已经放弃“首次使用时把 MySQL 安装成 Windows 服务并设置开机自启”的方案,改为绿色包 + 进程模式

  • 双击 CN_Tool.exe 时,应用会自动启动 mysqld.exe
  • 退出应用时MySQL 进程会自动停止
  • 无需管理员权限
  • 不会注册 Windows 服务
  • 不会依赖开机自启

为什么改成这样?

  • 旧方案需要管理员权限
  • 用户可能直接双击使用,导致服务安装失败后应用启动失败
  • 也可能出现授权失败、赋权不完整等问题
  • 对 C 端用户来说不稳定,因此改为随应用启停的绿色包进程模式

数据说明

  • 程序目录为纯英文/ASCII路径时MySQL 数据位于 应用目录\mysql\data\
  • 程序目录包含中文或其他非 ASCII 字符时MySQL 数据位于 X:\CN_Tool_Runtime\mysql\data\
  • 当前版本不依赖任何 MySQL Windows 服务

📚 相关文档

用户文档(随应用发布):

  • 使用说明.txt - 用户使用手册
  • README-升级回滚.txt - 简明升级说明

开发者文档doc/ 目录):

  • doc/CN_Tool绿色包完整指南.md - 本文档(完整指南)
  • doc/打包前检查清单.md - 逐项检查
  • doc/管理员权限说明.md - 历史服务模式与当前进程模式说明

📊 技术架构

核心模块

  • scripts/port-checker.js - 端口检测工具
  • scripts/startup-manager.js - 启动状态管理
  • scripts/config-generator.js - 配置文件生成
  • scripts/mysql-process-manager.js - MySQL 进程管理器
  • scripts/java-runner.js - Java 运行器
  • scripts/log-window-manager.js - 日志窗口管理
  • electron/preload/lifecycle.js - 生命周期管理
  • public/html/loading.html - Loading 界面

启动流程架构

lifecycle.js (入口)
    ↓ 创建
StartupManager (显示 Loading)
    ↓ 调用
PortChecker (检测端口)
    ↓ 调用
MySQLProcessManager (管理 MySQL 进程)
    ↓ 调用
ConfigGenerator (生成配置)
    ↓ 调用
JavaRunner (启动 Spring Boot)

🎉 最新改进

用户体验提升

  • 任务栏只显示1个图标 - Loading 窗口不在任务栏显示
  • 纯绿色版 - 最终交付目录统一为 out/CN_Tool,压缩成 zip 即可发布
  • 一键解压即用 - 用户解压后双击即可运行
  • 热更新机制 - 前后端可独立升级,支持一键回滚

技术改进

  • MySQL 密码自动配置 - 配置生成器自动写入密码
  • 权限自动授权 - 支持 localhost 和 127.0.0.1 访问
  • MySQL 进程模式 - 随应用启动和退出自动管理,无需管理员权限
  • 窗口管理优化 - 使用 destroy() 确保窗口完全释放
  • 精确进程清理 - 不会误杀其他 Java 进程
  • 自动备份机制 - 升级前自动备份,支持回滚
  • 热更新机制 - 前后端独立升级,无需重装

文档完善

  • 使用说明.txt - 为用户提供详细的使用指南
  • README-升级回滚.txt - 简明升级操作说明
  • 完整指南 - 打包、启动、升级三合一文档

📞 技术支持

如遇问题,请联系技术支持并提供:

  • 应用版本号
  • 错误日志(logs/ 目录)
  • 操作步骤截图

文档更新时间: 2025-10-23
南京灿能电力自动化股份有限公司