diff --git a/electron/main.js b/electron/main.js index 3cebd34f..210a4565 100644 --- a/electron/main.js +++ b/electron/main.js @@ -222,6 +222,12 @@ function checkServerAvailability(port, maxRetries = 30, retryDelay = 1000) { function startServer() { return new Promise((resolve, reject) => { const isDev = process.env.NODE_ENV === 'development'; + + const userDataPath = app.getPath('userData'); + const dataDir = path.join(userDataPath, 'data'); + + // 设置环境变量供 preload.js 使用 + process.env.ELECTRON_DATA_DIR = dataDir; if (isDev) { // 开发模式:假设开发者手动启动了 Go 后端和前端开发服务器 @@ -250,8 +256,6 @@ function startServer() { // 生产模式:启动二进制服务器 const env = { ...process.env, PORT: PORT.toString() }; - const userDataPath = app.getPath('userData'); - const dataDir = path.join(userDataPath, 'data'); if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir, { recursive: true }); diff --git a/electron/preload.js b/electron/preload.js index b0579172..ac971fd0 100644 --- a/electron/preload.js +++ b/electron/preload.js @@ -1,22 +1,11 @@ const { contextBridge } = require('electron'); // 获取数据目录路径(用于显示给用户) -// 使用字符串拼接而不是 path.join 避免模块依赖问题 +// 优先使用主进程设置的真实路径,如果没有则回退到手动拼接 function getDataDirPath() { - const platform = process.platform; - const homeDir = process.env.HOME || process.env.USERPROFILE || ''; - - switch (platform) { - case 'darwin': - return `${homeDir}/Library/Application Support/New API/data`; - case 'win32': { - const appData = process.env.APPDATA || `${homeDir}\\AppData\\Roaming`; - return `${appData}\\New API\\data`; - } - case 'linux': - return `${homeDir}/.config/New API/data`; - default: - return `${homeDir}/.new-api/data`; + // 如果主进程已设置真实路径,直接使用 + if (process.env.ELECTRON_DATA_DIR) { + return process.env.ELECTRON_DATA_DIR; } }