Files
cp-nix/patches/system-electron-resources.patch
T
2026-08-13 13:59:18 +08:00

117 lines
4.2 KiB
Diff

diff --git a/src/main/resolve/floatingWindow.ts b/src/main/resolve/floatingWindow.ts
index 49d1852..83fdb75 100644
--- a/src/main/resolve/floatingWindow.ts
+++ b/src/main/resolve/floatingWindow.ts
@@ -1,8 +1,8 @@
import { join } from 'path'
-import { is } from '@electron-toolkit/utils'
import { BrowserWindow, ipcMain } from 'electron'
import windowStateKeeper from 'electron-window-state'
import { getAppConfig, patchAppConfig } from '../config'
+import { isDevelopment } from '../utils/dirs'
import { floatingWindowLogger } from '../utils/logger'
import { applyTheme } from './theme'
import { buildContextMenu, showTrayIcon } from './tray'
@@ -86,11 +86,11 @@ async function createFloatingWindow(): Promise<void> {
// 加载页面
const url =
- is.dev && process.env['ELECTRON_RENDERER_URL']
+ isDevelopment() && process.env['ELECTRON_RENDERER_URL']
? `${process.env['ELECTRON_RENDERER_URL']}/floating.html`
: join(__dirname, '../renderer/floating.html')
- is.dev ? await floatingWindow.loadURL(url) : await floatingWindow.loadFile(url)
+ isDevelopment() ? await floatingWindow.loadURL(url) : await floatingWindow.loadFile(url)
} catch (error) {
logError('Failed to create floating window', error)
floatingWindow = null
diff --git a/src/main/utils/dirs.ts b/src/main/utils/dirs.ts
index 0771ca0..d6e2c84 100644
--- a/src/main/utils/dirs.ts
+++ b/src/main/utils/dirs.ts
@@ -61,15 +61,18 @@ export function exePath(): string {
return app.getPath('exe')
}
+export function isDevelopment(): boolean {
+ return is.dev && !app.getAppPath().endsWith('asar')
+}
+
export function resourcesDir(): string {
- if (is.dev) {
+ const appPath = app.getAppPath()
+ if (appPath.endsWith('asar')) {
+ return path.dirname(appPath)
+ } else if (isDevelopment()) {
return path.join(__dirname, '../../extra')
} else {
- if (app.getAppPath().endsWith('asar')) {
- return process.resourcesPath
- } else {
- return path.join(app.getAppPath(), 'resources')
- }
+ return path.join(appPath, 'resources')
}
}
diff --git a/src/main/window.ts b/src/main/window.ts
index d40f89c..60529a3 100644
--- a/src/main/window.ts
+++ b/src/main/window.ts
@@ -1,12 +1,11 @@
import { join } from 'path'
import { readFileSync } from 'fs'
import { BrowserWindow, Menu, screen, shell } from 'electron'
-import { is } from '@electron-toolkit/utils'
import icon from '../../resources/icon.png?asset'
import { getAppConfig } from './config'
import { quitWithoutCore } from './core/manager'
import { hideDockIcon, showDockIcon } from './resolve/tray'
-import { dataDir } from './utils/dirs'
+import { dataDir, isDevelopment } from './utils/dirs'
import { mainWindowLogger } from './utils/logger'
import { atomicWriteFileSync } from './utils/safeFile'
@@ -199,12 +198,12 @@ async function createWindowInternal(): Promise<void> {
autoQuitWithoutCoreMode
})
- if (is.dev) {
+ if (isDevelopment()) {
mainWindow.webContents.openDevTools()
}
const windowToLoad = mainWindow
- if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
+ if (isDevelopment() && process.env['ELECTRON_RENDERER_URL']) {
await windowToLoad.loadURL(process.env['ELECTRON_RENDERER_URL'])
} else {
await windowToLoad.loadFile(join(__dirname, '../renderer/index.html'))
@@ -228,7 +227,7 @@ function setupWindowEvents(window: BrowserWindow, config: WindowConfig): void {
}
// 开发模式下始终显示窗口
- if (!silentStart || is.dev) {
+ if (!silentStart || isDevelopment()) {
clearQuitTimeout()
window.show()
window.focusOnWebView()
diff --git a/src/native/sysproxy/index.js b/src/native/sysproxy/index.js
index 147988f..f1b1ff3 100644
--- a/src/native/sysproxy/index.js
+++ b/src/native/sysproxy/index.js
@@ -71,6 +71,12 @@ function getResourcesPath() {
try {
const { app } = require('electron')
const appPath = app.getAppPath()
+ // A shared system Electron keeps process.resourcesPath in Electron's own
+ // store path. The directory containing app.asar is the app resource path.
+ if (appPath.endsWith('.asar') && existsSync(join(dirname(appPath), 'sidecar'))) {
+ return dirname(appPath)
+ }
+
if (existsSync(join(appPath, 'extra', 'sidecar'))) {
return appPath
}