# 锁文件和缓存问题修复说明 ## 问题描述 运行 `npm run dev` 时遇到以下问题: 1. **锁文件被占用**:`EBUSY: resource busy or locked, unlink 'lockfile'` 2. **单实例检查失败**:即使锁文件无效,也无法启动新实例 3. **缓存错误**:`Unable to move the cache: 拒绝访问` 和 `Failed to delete the database` ## 问题原因分析 1. **文件占用**:锁文件被其他进程占用,无法删除 2. **进程检查不准确**:锁文件中的 PID 为 NaN,导致进程检查失败 3. **缓存冲突**:多个实例同时访问缓存目录导致冲突 4. **权限问题**:某些文件需要管理员权限才能删除 ## 修复内容 ### 1. 改进锁文件删除机制 (`src/main/utils/singleInstance.js`) - 添加 `safeDeleteFile()` 方法,处理文件被占用的情况 - 在 Windows 上使用 `del /F /Q` 命令强制删除 - 改进错误处理和日志记录 ### 2. 智能单实例检查 - 检查是否有实际的窗口存在,而不仅仅依赖锁文件 - 如果找不到现有窗口,允许强制启动新实例 - 添加详细的日志记录 ### 3. 缓存清理和配置 (`src/main/index.js`) - 添加缓存相关命令行参数 - 在应用启动时清理缓存目录 - 避免缓存冲突 ### 4. 托盘菜单增强 (`src/main/tray.js`) - 改进"清理实例锁"功能,处理文件占用情况 - 添加"强制重启应用"选项 - 提供更安全的文件删除机制 ### 5. 测试脚本 (`test-lock-cleanup.js`) - 提供锁文件清理功能的测试 - 验证文件删除机制 - 帮助调试锁文件问题 ## 修复后的功能特点 ### 安全的文件删除 1. **多重尝试**:首先尝试直接删除,失败后使用系统命令 2. **错误处理**:区分不同类型的错误,提供相应的解决方案 3. **日志记录**:详细记录删除过程和结果 ### 智能启动逻辑 1. **窗口检查**:检查是否有实际的窗口存在 2. **强制启动**:如果锁文件无效且无窗口,允许强制启动 3. **详细日志**:记录每个决策步骤 ### 缓存管理 1. **启动时清理**:应用启动时自动清理缓存目录 2. **命令行配置**:添加缓存相关配置避免冲突 3. **错误处理**:处理缓存清理过程中的错误 ## 使用方法 ### 自动修复 1. 重新运行 `npm run dev` 2. 应用会自动处理锁文件和缓存问题 3. 如果锁文件被占用,会尝试强制删除 ### 手动清理 1. 右键点击托盘图标 2. 选择"清理实例锁"或"强制重启应用" 3. 查看日志确认操作结果 ### 测试功能 ```bash # 测试锁文件清理功能 node test-lock-cleanup.js ``` ## 修复后的启动流程 ### 正常启动 ``` [时间] 开始检查单实例锁... [时间] 发现锁文件: [路径] [时间] 进程 [PID] 不存在,尝试删除无效锁文件 [时间] 成功删除文件: [路径] [时间] 单实例锁检查结果: true [时间] 这是第一个实例,继续启动 [时间] 应用已准备就绪,开始初始化... [时间] 清理缓存目录: [路径] [时间] 缓存目录清理完成: [路径] ``` ### 锁文件被占用 ``` [时间] 发现锁文件: [路径] [时间] 文件被占用,无法删除: [路径] [时间] 使用 del 命令删除文件: [路径] [时间] 单实例锁检查结果: true [时间] 这是第一个实例,继续启动 ``` ### 强制启动 ``` [时间] 单实例锁检查结果: false [时间] 检测到已有实例运行 [时间] 未找到现有实例窗口,可能是锁文件问题,允许强制启动 [时间] 这是第一个实例,继续启动 ``` ## 常见问题解决 ### 1. 锁文件仍然无法删除 1. 使用托盘菜单的"强制重启应用"功能 2. 手动删除锁文件: ```cmd del /F /Q "C:\Users\[用户名]\AppData\Roaming\market-manager-gui\lockfile" ``` 3. 重启开发环境 ### 2. 缓存错误仍然存在 1. 手动清理缓存目录: ```cmd rmdir /S /Q "C:\Users\[用户名]\AppData\Roaming\market-manager-gui\Cache" rmdir /S /Q "C:\Users\[用户名]\AppData\Roaming\market-manager-gui\Code Cache" ``` 2. 以管理员身份运行应用 ### 3. 权限问题 1. 以管理员身份运行命令提示符 2. 手动删除相关文件 3. 检查文件权限设置 ## 注意事项 ### 1. 开发环境 - 在开发过程中,锁文件和缓存可能会频繁创建和删除 - 如果遇到问题,使用托盘菜单的清理功能 - 查看日志文件获取详细信息 ### 2. 生产环境 - 确保应用正常退出时能清理锁文件 - 监控缓存目录的大小 - 定期检查是否有无效锁文件 ### 3. 调试建议 - 使用 `test-lock-cleanup.js` 脚本测试文件删除功能 - 查看日志文件了解锁文件和缓存的状态 - 使用托盘菜单的手动清理功能 ## 相关文件 - `src/main/utils/singleInstance.js` - 单实例锁管理工具(已更新) - `src/main/index.js` - 主进程启动文件(已更新) - `src/main/tray.js` - 托盘功能(已更新) - `test-lock-cleanup.js` - 锁文件清理测试脚本