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) + } + } +}