138 lines
4.1 KiB
Markdown
138 lines
4.1 KiB
Markdown
# 应用启动问题修复说明
|
||
|
||
## 问题描述
|
||
运行 `npm run dev` 时,程序在启动过程中立即退出,日志显示:
|
||
```
|
||
13:03:04.627 > 应用启动,日志文件路径: C:\Users\coolp\AppData\Roaming\market-manager-gui\logs\main.log
|
||
Process finished with exit code 0
|
||
```
|
||
|
||
## 问题原因分析
|
||
1. **WebSocketClient 过早初始化**:在应用启动时立即创建 WebSocket 连接,但此时可能缺少必要的配置信息
|
||
2. **异步操作处理不当**:`app.whenReady()` 是异步的,但程序在等待完成前就退出了
|
||
3. **错误处理不完善**:某些同步操作可能抛出异常导致程序退出
|
||
4. **缺少启动状态日志**:无法确定程序在哪个阶段退出
|
||
|
||
## 修复内容
|
||
|
||
### 1. 延迟 WebSocket 连接创建
|
||
- 将 WebSocketClient 的创建延迟到应用完全启动后
|
||
- 添加错误处理和重试机制
|
||
- 避免在应用启动时立即连接
|
||
|
||
### 2. 改进错误处理
|
||
- 为所有可能失败的同步操作添加 try-catch
|
||
- 改进未捕获异常的处理,不立即退出程序
|
||
- 添加详细的错误日志
|
||
|
||
### 3. 增加启动日志
|
||
- 添加详细的启动过程日志
|
||
- 记录每个关键步骤的执行状态
|
||
- 便于定位问题所在
|
||
|
||
### 4. 修复异步操作
|
||
- 确保 `app.whenReady()` 正确等待
|
||
- 添加启动完成确认日志
|
||
- 改进事件监听器的设置
|
||
|
||
## 修复后的启动流程
|
||
|
||
### 启动日志示例
|
||
```
|
||
[时间] 当前运行平台: win32
|
||
[时间] Windows 系统,设置控制台编码为 UTF-8
|
||
[时间] Store 初始化成功
|
||
[时间] 硬件加速已禁用
|
||
[时间] 应用启动,日志文件路径: [路径]
|
||
[时间] 开始检查单实例锁...
|
||
[时间] 单实例锁检查结果: true
|
||
[时间] 这是第一个实例,继续启动
|
||
[时间] 应用已准备就绪,开始初始化...
|
||
[时间] 应用初始化完成
|
||
[时间] WebSocket连接已打开 (延迟2秒后)
|
||
```
|
||
|
||
### 关键修复点
|
||
|
||
#### 1. WebSocketClient 延迟创建
|
||
```javascript
|
||
// 延迟创建WebSocket连接
|
||
setTimeout(() => {
|
||
createWebSocketClient()
|
||
}, 2000); // 延迟2秒创建WebSocket连接
|
||
```
|
||
|
||
#### 2. 错误处理改进
|
||
```javascript
|
||
// 改进未捕获异常处理
|
||
process.on('uncaughtException', (error) => {
|
||
logger.error('未捕获的异常:', error);
|
||
// 不要立即退出,给应用一个恢复的机会
|
||
logger.error('应用遇到未捕获的异常,但将继续运行');
|
||
});
|
||
```
|
||
|
||
#### 3. 同步操作保护
|
||
```javascript
|
||
try {
|
||
app.disableHardwareAcceleration()
|
||
logger.info('硬件加速已禁用')
|
||
} catch (error) {
|
||
logger.error('禁用硬件加速失败:', error)
|
||
}
|
||
```
|
||
|
||
## 验证修复效果
|
||
|
||
### 1. 检查启动日志
|
||
运行 `npm run dev` 后,查看控制台输出,应该能看到完整的启动日志,包括:
|
||
- 应用准备就绪
|
||
- 初始化完成
|
||
- WebSocket 连接成功
|
||
|
||
### 2. 检查应用状态
|
||
- 应用应该正常启动并显示主窗口
|
||
- 托盘图标应该正常显示
|
||
- 不应该出现 "Process finished with exit code 0" 的提前退出
|
||
|
||
### 3. 检查日志文件
|
||
查看日志文件 `C:\Users\coolp\AppData\Roaming\market-manager-gui\logs\main.log`,应该包含完整的启动过程记录。
|
||
|
||
## 测试脚本
|
||
|
||
### 启动测试
|
||
```bash
|
||
# 运行应用
|
||
npm run dev
|
||
|
||
# 检查日志
|
||
tail -f "C:\Users\coolp\AppData\Roaming\market-manager-gui\logs\main.log"
|
||
```
|
||
|
||
### 功能测试
|
||
1. 应用启动后,右键点击托盘图标
|
||
2. 选择"查看日志"验证日志功能
|
||
3. 选择"清除缓存"验证缓存清理功能
|
||
|
||
## 注意事项
|
||
|
||
### 1. 开发环境
|
||
- 在开发环境中,应用可能需要更长时间启动
|
||
- WebSocket 连接可能会因为缺少配置而失败,这是正常的
|
||
- 查看日志文件获取详细的错误信息
|
||
|
||
### 2. 生产环境
|
||
- 确保所有必要的配置都已设置
|
||
- WebSocket 连接应该能够正常建立
|
||
- 应用应该能够稳定运行
|
||
|
||
### 3. 调试建议
|
||
- 如果仍然有问题,查看日志文件中的详细错误信息
|
||
- 检查配置文件是否正确设置
|
||
- 确认网络连接是否正常
|
||
|
||
## 相关文件
|
||
- `src/main/index.js` - 主进程启动文件
|
||
- `src/main/utils/WebSocketClient.js` - WebSocket 客户端
|
||
- `src/main/utils/logger.js` - 日志工具
|
||
- `test-startup.js` - 启动测试脚本 |