const { app } = require('electron'); const fs = require('fs'); const path = require('path'); console.log('开始测试单实例锁功能...'); // 模拟单实例锁检查 function testSingleInstanceLock() { const userDataPath = app.getPath('userData'); const lockFile = path.join(userDataPath, 'single-instance-lock'); console.log('用户数据路径:', userDataPath); console.log('锁文件路径:', lockFile); // 检查是否存在锁文件 if (fs.existsSync(lockFile)) { console.log('发现锁文件,尝试读取内容...'); try { const content = fs.readFileSync(lockFile, 'utf8'); console.log('锁文件内容:', content); // 检查进程是否还在运行 const pid = parseInt(content.trim()); console.log('锁文件中的 PID:', pid); // 在 Windows 上检查进程 if (process.platform === 'win32') { const { execSync } = require('child_process'); try { const result = execSync(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`, { encoding: 'utf8' }); if (result.includes(pid.toString())) { console.log(`进程 ${pid} 仍在运行`); } else { console.log(`进程 ${pid} 不存在,可以清理锁文件`); fs.unlinkSync(lockFile); console.log('锁文件已清理'); } } catch (error) { console.log(`进程 ${pid} 不存在,清理锁文件`); fs.unlinkSync(lockFile); console.log('锁文件已清理'); } } } catch (error) { console.error('读取锁文件失败:', error); } } else { console.log('没有找到锁文件'); } } // 测试创建锁文件 function testCreateLock() { const userDataPath = app.getPath('userData'); const lockFile = path.join(userDataPath, 'single-instance-lock'); try { fs.writeFileSync(lockFile, process.pid.toString()); console.log(`创建锁文件: ${lockFile}, PID: ${process.pid}`); } catch (error) { console.error('创建锁文件失败:', error); } } // 运行测试 console.log('当前进程 PID:', process.pid); testSingleInstanceLock(); // 如果直接运行此脚本 if (require.main === module) { // 创建测试锁文件 testCreateLock(); // 等待一段时间后清理 setTimeout(() => { console.log('清理测试锁文件...'); const userDataPath = app.getPath('userData'); const lockFile = path.join(userDataPath, 'single-instance-lock'); if (fs.existsSync(lockFile)) { fs.unlinkSync(lockFile); console.log('测试锁文件已清理'); } process.exit(0); }, 5000); } module.exports = { testSingleInstanceLock, testCreateLock };