main.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const { app, BrowserWindow } = require('electron');
  2. const serverManager = require('./serverManager');
  3. const menuManager = require('./menuManager');
  4. const constants = require('./constants');
  5. let win = null;
  6. // 创建 Electron 窗口的函数
  7. const createWindow = async () => {
  8. try {
  9. const isServerRunning = await serverManager.checkServerHealth();
  10. if (!isServerRunning) {
  11. await serverManager.startServer(); // 启动 Web API
  12. }
  13. win = new BrowserWindow({
  14. width: 800,
  15. height: 600,
  16. webPreferences: {
  17. nodeIntegration: true,
  18. contextIsolation: false,
  19. },
  20. });
  21. win.maximize();
  22. win.loadURL(constants.baseUrl, {
  23. agent: constants.agent
  24. });
  25. } catch (error) {
  26. console.error('Error starting server or loading window:', error);
  27. }
  28. };
  29. // 当 Electron 应用准备好时创建窗口
  30. app.whenReady().then(() => {
  31. createWindow();
  32. menuManager.createMenu();
  33. app.on('activate', () => {
  34. if (BrowserWindow.getAllWindows().length === 0) {
  35. createWindow();
  36. }
  37. });
  38. // 监听 before-quit 事件,关闭 IES.ExamServer.exe 进程
  39. app.on('before-quit', async (event) => {
  40. event.preventDefault(); // 阻止默认的退出行为
  41. await serverManager.shutdownServer();
  42. //app.quit(); // 关闭 Electron 应用程序
  43. });
  44. });
  45. // 当所有窗口关闭时退出应用(macOS 除外)
  46. app.on('window-all-closed', function () {
  47. app.quit();
  48. });