# 锁文件和缓存问题修复说明

## 问题描述
运行 `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` - 锁文件清理测试脚本 