main.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. const { app, BrowserWindow, BrowserView, Tray, Menu, nativeImage, screen } = require('electron')
  2. const child_process = require('child_process');
  3. const { exec } = child_process
  4. const { error } = require('console');
  5. const { stdout, stderr, argv0 } = require('process');
  6. const path = require('path')
  7. const { createPort, getRunPort } = require('./server/index')
  8. app.disableHardwareAcceleration();
  9. app.commandLine.appendSwitch('use-angle', 'd3d9');
  10. function createWindow (port) {
  11. const { width, height } = screen.getPrimaryDisplay().workAreaSize;
  12. const mainWindow = new BrowserWindow({
  13. width: width,
  14. height: height,// 设置打开的窗口大小
  15. // fullscreen: true,
  16. // simpleFullScreen: true,
  17. focusable: true,
  18. useContentSize: true,
  19. menuBarVisible : false,
  20. enableLargerThanScreen: true,
  21. autoHideMenuBar: true,
  22. icon: 'logo.png',
  23. webPreferences: {
  24. contextIsolation: false,
  25. // worldSafeExecuteJavaScript:a flse,
  26. // webSecurity: false,
  27. nodeIntegration: true, // 是否集成node.js,解决require is not defined问题
  28. // nodeIntegrationInWorker: true,
  29. // webviewTag: true, // 解决webview无法显示问题w
  30. // enableRemoteModule: true,
  31. }
  32. });
  33. const { setTimeout } = require('timers')
  34. createPort((port) => {
  35. setTimeout(() => {
  36. var view = new BrowserView() // new出对象
  37. mainWindow.setBrowserView(view) // 在主窗口中设置view可用
  38. view.setBounds({x: 0,y: 0, width: width , height: height}) // 定义view的具体样式和位置
  39. view.setAutoResize({width: true, height: true})
  40. view.useContentSize = true
  41. view.webContents.loadURL('http://localhost:' + port + '/html') // wiew载入的页面
  42. }, 1000)
  43. mainWindow.on('closed', () => {
  44. console.log('mainWindow ---closed', );
  45. closePort(port)
  46. });
  47. })
  48. }
  49. app.on('ready', () => {
  50. createWindow()
  51. })
  52. app.on('window-all-closed', () => {
  53. if (process.platform !== 'darwin') {
  54. app.quit()
  55. }
  56. console.log('window-all-closed active');
  57. })
  58. app.on('activate', () => {
  59. app.setName('中德智慧思维芯资源库')
  60. if (BrowserWindow.getAllWindows().length === 0) {
  61. }
  62. })
  63. // 创建函数来关闭指定端口的进程
  64. function closePort(port) {
  65. // 使用 netstat 查找占用端口的进程
  66. exec(`netstat -ano | findstr :${port}`, (error, stdout, stderr) => {
  67. if (error) {
  68. console.error(`exec error: ${error}`);
  69. return;
  70. }
  71. if (!stdout) {
  72. console.log(`prop ${port} not has`);
  73. return;
  74. }
  75. // 输出的最后一列是 PID
  76. const lines = stdout.trim().split('\n');
  77. lines.forEach(line => {
  78. const parts = line.trim().split(/\s+/);
  79. const pid = parts[parts.length - 1];
  80. console.log(`port ${port} PID is ${pid} progress has`);
  81. // 使用 taskkill 命令终止进程
  82. exec(`taskkill /F /PID ${pid}`, (error, stdout, stderr) => {
  83. if (error) {
  84. console.error(`unstop PID: ${pid} - ${error}`);
  85. return;
  86. }
  87. console.log(`success stop PID: ${pid}`);
  88. });
  89. });
  90. });
  91. }