diff --git a/packages/desktop-electron/src/main/index.ts b/packages/desktop-electron/src/main/index.ts index 73b6a644e..4ee71ba2a 100644 --- a/packages/desktop-electron/src/main/index.ts +++ b/packages/desktop-electron/src/main/index.ts @@ -325,17 +325,13 @@ function wireMenu() { void checkForUpdates(true) }, reload: () => mainWindow?.reload(), - relaunch: () => { - killSidecar() - wslServers.stopAll() - app.relaunch() - app.exit(0) - }, + relaunch: () => relaunchApp(), }) } registerIpcHandlers({ killSidecar: () => killSidecar(), + relaunch: () => relaunchApp(), awaitInitialization: async (sendStep) => { sendStep(initStep) const listener = (step: InitStep) => sendStep(step) @@ -386,6 +382,15 @@ function killSidecar() { server = null } +function relaunchApp() { + // app.exit() skips before-quit / will-quit, so relaunch callers must + // explicitly stop sidecars here rather than relying on process hooks. + killSidecar() + wslServers.stopAll() + app.relaunch() + app.exit(0) +} + function ensureLoopbackNoProxy() { const loopback = ["127.0.0.1", "localhost", "::1"] const upsert = (key: string) => { diff --git a/packages/desktop-electron/src/main/ipc.ts b/packages/desktop-electron/src/main/ipc.ts index 5134866ba..c6d2c4fac 100644 --- a/packages/desktop-electron/src/main/ipc.ts +++ b/packages/desktop-electron/src/main/ipc.ts @@ -22,6 +22,7 @@ const pickerFilters = (ext?: string[]) => { type Deps = { killSidecar: () => void + relaunch: () => void awaitInitialization: (sendStep: (step: InitStep) => void) => Promise getWslServersState: () => Promise | WslServersState onWslServersEvent: (listener: (event: WslServersEvent) => void) => () => void @@ -227,8 +228,7 @@ export function registerIpcHandlers(deps: Deps) { }) ipcMain.on("relaunch", () => { - app.relaunch() - app.exit(0) + deps.relaunch() }) ipcMain.handle("get-zoom-factor", (event: IpcMainInvokeEvent) => event.sender.getZoomFactor())