import { app, shell, BrowserWindow } from "electron"; import { setupLiveHandlers } from "./ipc/live"; import { setupPromptHandlers } from "./ipc/prompt"; import { setupWorkflowHandlers } from "./ipc/workflow"; import { preload, indexHtml, ELECTRON_RENDERER_URL } from "./config"; // 简单的开发环境检测 const isDev = process.env.NODE_ENV === 'development'; /** * 创建主窗口 */ function createWindow(): void { const mainWindow = new BrowserWindow({ width: 1080, height: 670, show: false, autoHideMenuBar: true, webPreferences: { preload, sandbox: false, }, }); mainWindow.on("ready-to-show", () => { mainWindow.show(); }); mainWindow.webContents.openDevTools(); mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url); return { action: "deny" }; }); // 窗口关闭时强制清理资源并退出应用 mainWindow.on("closed", () => { // 清理所有资源 mainWindow.removeAllListeners(); // 强制退出应用 if (process.platform !== "darwin") { app.quit(); } }); if (isDev && ELECTRON_RENDERER_URL) { mainWindow.loadURL(ELECTRON_RENDERER_URL); } else { mainWindow.loadFile(indexHtml); } } /** * 准备好后 */ app.whenReady().then(() => { app.setAppUserModelId("com.electron"); // 直播相关处理 setupLiveHandlers(); setupPromptHandlers(); setupWorkflowHandlers(); createWindow(); app.on("activate", function () { if (BrowserWindow.getAllWindows().length === 0) createWindow(); }); }); /** * 退出应用 */ app.on("window-all-closed", () => { // 强制清理所有资源 if (process.platform !== "darwin") { app.quit(); } }); // 在开发环境中,确保进程正确退出 app.on("before-quit", () => { // 清理所有资源 const windows = BrowserWindow.getAllWindows(); windows.forEach(window => { window.removeAllListeners(); window.close(); }); }); // 处理进程退出信号 process.on("SIGINT", () => { app.quit(); }); process.on("SIGTERM", () => { app.quit(); });