From 7d69c1274b5f91c9665131664724281110f4828f Mon Sep 17 00:00:00 2001 From: Song <1667077010@qq.com> Date: Thu, 24 Apr 2025 17:22:35 +0800 Subject: [PATCH] feat: support portable config dir (#5039) * feat: support portable config dir * fix: remove redundant mkdir --- src/main/constant.ts | 1 + src/main/index.ts | 3 +++ src/main/utils/file.ts | 10 ++++++++++ 3 files changed, 14 insertions(+) diff --git a/src/main/constant.ts b/src/main/constant.ts index f37c235cb2..4ec56765b7 100644 --- a/src/main/constant.ts +++ b/src/main/constant.ts @@ -2,3 +2,4 @@ export const isMac = process.platform === 'darwin' export const isWin = process.platform === 'win32' export const isLinux = process.platform === 'linux' export const isDev = process.env.NODE_ENV === 'development' +export const isPortable = isWin && 'PORTABLE_EXECUTABLE_DIR' in process.env diff --git a/src/main/index.ts b/src/main/index.ts index 7285b1b5e2..be648d55f1 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -12,6 +12,7 @@ import { CHERRY_STUDIO_PROTOCOL, handleProtocolUrl, registerProtocolClient } fro import { registerShortcuts } from './services/ShortcutService' import { TrayService } from './services/TrayService' import { windowService } from './services/WindowService' +import { setAppDataDir } from './utils/file' // Check for single instance lock if (!app.requestSingleInstanceLock()) { @@ -50,6 +51,8 @@ if (!app.requestSingleInstanceLock()) { replaceDevtoolsFont(mainWindow) + setAppDataDir() + if (process.env.NODE_ENV === 'development') { installExtension([REDUX_DEVTOOLS, REACT_DEVELOPER_TOOLS]) .then((name) => console.log(`Added Extension: ${name}`)) diff --git a/src/main/utils/file.ts b/src/main/utils/file.ts index de091555ec..7d120801bc 100644 --- a/src/main/utils/file.ts +++ b/src/main/utils/file.ts @@ -2,6 +2,7 @@ import * as fs from 'node:fs' import os from 'node:os' import path from 'node:path' +import { isPortable } from '@main/constant' import { audioExts, documentExts, imageExts, textExts, videoExts } from '@shared/config/constant' import { FileType, FileTypes } from '@types' import { app } from 'electron' @@ -83,3 +84,12 @@ export function getConfigDir() { export function getAppConfigDir(name: string) { return path.join(getConfigDir(), name) } + +export function setAppDataDir() { + if (isPortable) { + const dir = path.join(path.dirname(app.getPath('exe')), 'data') + if (fs.existsSync(dir)) { + app.setPath('appData', dir) + } + } +}