From 6402c4b78dd41263c92998c8fe26aaa723b030aa Mon Sep 17 00:00:00 2001 From: chenqiang Date: Wed, 10 Sep 2025 12:49:55 +0800 Subject: [PATCH] data path --- background/db/path.js | 56 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/background/db/path.js b/background/db/path.js index e287e59..7ece533 100644 --- a/background/db/path.js +++ b/background/db/path.js @@ -11,19 +11,51 @@ if (isDev) { // 开发环境:数据存储在工程的data目录 dataDir = path.join(process.cwd(), 'data'); } else { - // 生产环境(便携模式):使用resources目录下的data文件夹 - dataDir = path.join(process.resourcesPath, 'data'); -} + try { + // 生产环境(便携模式): + // 1. 获取可执行文件所在目录 + const exePath = process.execPath; + const exeDir = path.dirname(exePath); -// 确保数据目录存在 -if (!fs.existsSync(dataDir)) { - fs.mkdirSync(dataDir, { recursive: true }); - console.log(`创建数据目录: ${dataDir}`); + // 2. 检查是否在临时目录中 + const isTempDir = exeDir.toLowerCase().includes('temp') || exeDir.toLowerCase().includes('tmp'); + + if (isTempDir) { + // 3. 如果在临时目录,尝试多种方式寻找真实安装路径 + // - 方式1:通过可执行文件名回溯 + const exeName = path.basename(exePath); + // - 方式2:使用用户主目录下的固定文件夹 + const userDataDir = path.join(app.getPath('userData'), 'StatExamData'); + + // 创建用户数据目录并使用 + if (!fs.existsSync(userDataDir)) { + fs.mkdirSync(userDataDir, { recursive: true }); + } + dataDir = userDataDir; + + console.log(`检测到临时目录环境,数据目录已切换至: ${dataDir}`); + } else { + // 直接使用可执行文件所在目录下的data文件夹 + dataDir = path.join(exeDir, 'data'); + } + + // 确保数据目录存在 + if (!fs.existsSync(dataDir)) { + fs.mkdirSync(dataDir, { recursive: true }); + console.log(`创建数据目录: ${dataDir}`); + } + } catch (error) { + console.error('获取数据目录失败:', error); + // 错误情况下使用用户数据目录作为后备 + dataDir = path.join(app.getPath('userData'), 'StatExamData'); + if (!fs.existsSync(dataDir)) { + fs.mkdirSync(dataDir, { recursive: true }); + } + } } // 输出调试信息 console.log('应用是否打包:', app.isPackaged); -console.log('资源目录路径:', process.resourcesPath); console.log('数据目录路径:', dataDir); // 系统数据库路径 @@ -36,7 +68,13 @@ function getUserDbPath() { return path.join(dataDir, 'user.db'); } +// 导出获取数据目录的方法,便于调试 +function getDataDir() { + return dataDir; +} + module.exports = { getSystemDbPath, - getUserDbPath + getUserDbPath, + getDataDir }; \ No newline at end of file