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