diff --git a/packages/desktop/src/daemon/runtime-paths.ts b/packages/desktop/src/daemon/runtime-paths.ts index 5f6a4ea5c..18c09e9a6 100644 --- a/packages/desktop/src/daemon/runtime-paths.ts +++ b/packages/desktop/src/daemon/runtime-paths.ts @@ -168,6 +168,30 @@ export function resolveCliEntrypoint(): NodeEntrypointSpec { }; } +function resolveNodeExecPath(): string { + if (app.isPackaged && process.platform === "darwin") { + const marker = ".app/Contents/MacOS/"; + const markerIndex = process.execPath.indexOf(marker); + if (markerIndex !== -1) { + const bundleRoot = process.execPath.substring(0, markerIndex + ".app".length); + const name = path.basename(process.execPath); + const helperPath = path.join( + bundleRoot, + "Contents", + "Frameworks", + `${name} Helper.app`, + "Contents", + "MacOS", + `${name} Helper`, + ); + if (existsSync(helperPath)) { + return helperPath; + } + } + } + return process.execPath; +} + export function createNodeEntrypointInvocation(input: { entrypoint: NodeEntrypointSpec; argvMode: NodeEntrypointArgvMode; @@ -175,7 +199,7 @@ export function createNodeEntrypointInvocation(input: { baseEnv: NodeJS.ProcessEnv; }): NodeEntrypointInvocation { return createSharedNodeEntrypointInvocation({ - execPath: process.execPath, + execPath: resolveNodeExecPath(), isPackaged: app.isPackaged, packagedRunnerPath: app.isPackaged ? assertPathExists({