2026-10-15 13:53:04 +08:00
|
|
|
|
const fs = require("node:fs");
|
|
|
|
|
|
const path = require("node:path");
|
|
|
|
|
|
|
|
|
|
|
|
function applyPortableDataDirectory({
|
|
|
|
|
|
app,
|
|
|
|
|
|
env = process.env,
|
|
|
|
|
|
platform = process.platform,
|
|
|
|
|
|
}) {
|
2026-10-19 21:11:57 +08:00
|
|
|
|
// 触发条件:exe 所在目录下有 .portable 标记文件
|
|
|
|
|
|
// 这样开发版(没有 .portable)完全不受影响,只有绿色便携版才生效
|
|
|
|
|
|
if (platform !== "win32") return null;
|
2026-10-15 13:53:04 +08:00
|
|
|
|
|
2026-10-19 21:11:57 +08:00
|
|
|
|
let exeDir;
|
|
|
|
|
|
try { exeDir = path.dirname(app.getPath("exe")); } catch { return null; }
|
|
|
|
|
|
|
|
|
|
|
|
const markerFile = path.join(exeDir, ".portable");
|
|
|
|
|
|
if (!fs.existsSync(markerFile)) return null;
|
|
|
|
|
|
|
|
|
|
|
|
const dataDirectory = path.join(exeDir, "data");
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
if (!fs.existsSync(dataDirectory)) {
|
|
|
|
|
|
fs.mkdirSync(dataDirectory, { recursive: true });
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (_) {
|
2026-10-15 13:53:04 +08:00
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-10-19 21:11:57 +08:00
|
|
|
|
console.info(`[Main] Portable data directory (via .portable marker): ${dataDirectory}`);
|
2026-10-15 13:53:04 +08:00
|
|
|
|
app.setPath("userData", dataDirectory);
|
|
|
|
|
|
app.setPath("sessionData", dataDirectory);
|
2026-10-19 21:11:57 +08:00
|
|
|
|
return { dataDirectory, source: "marker-file" };
|
2026-10-15 13:53:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = { applyPortableDataDirectory };
|