fgv2.0 平台 electron 打包桌面应用
whychw
2026-03-21 29b048064ae92d5d8d9737477f4375f724deeb08
main.js
@@ -106,42 +106,114 @@
      log.info("窗口初始化 接口不通");
      log.info("正在终止java进程,然后重启服务");
      // update(win.webContents, true);
      let stop = child_process.spawn("cmd.exe", ["/c", `${process.cwd()}\\stop.bat`]);
      log.info(`${process.cwd()}\\stop.bat`);
      stop.on("exit", function (code) {
        if (code > 0) {
          log.info('执行stop.bat没有正确exit, 错误码' + code);
          // return false;
        }
        log.info("java进程被终止,准备重启服务");
        child_process.exec(
          `"${process.cwd()}\\fgv2.exe" restart`,
          (err) => {
            if (err) {
              log.info("重启服务出错了stderr: " + JSON.stringify(err));
              // 重新运行setup批处理 尝试重新注册服务
              child_process.spawn("cmd.exe", ["/c", "setup_service.bat"]);
              log.info("服务异常 正在尝试重新注册服务");
            } else {
              log.info("服务重启成功,连接中");
            }
            // 等到服务就绪再重启
            checkService(() => {
              loadingWin.webContents.send("java-ready");
            });
          }
        );
      });
      stop.on('error', (code, data) => {
        log.info('stop.bat 执行 error');
        log.info(code);
        log.info(data);
      });
      // 如果是win平台
      if (process.platform == 'darwin' || process.platform == 'win32') {
        stopForWin();
      } else if (process.platform == 'linux') {
        stopForLinux();
      }
    }
  );
  
};
// 终止java进程 并重启服务 win平台
function stopForWin() {
  let stop = child_process.spawn("cmd.exe", ["/c", `${process.cwd()}\\stop.bat`]);
  log.info(`${process.cwd()}\\stop.bat`);
  stop.on("exit", function (code) {
    if (code > 0) {
      log.info('执行stop.bat没有正确exit, 错误码' + code);
      // return false;
    }
    log.info("java进程被终止,准备重启服务");
    child_process.exec(
      `"${process.cwd()}\\fgv2.exe" restart`,
      (err) => {
        if (err) {
          log.info("重启服务出错了stderr: " + JSON.stringify(err));
          // 重新运行setup批处理 尝试重新注册服务
          child_process.spawn("cmd.exe", ["/c", "setup_service.bat"]);
          log.info("服务异常 正在尝试重新注册服务");
        } else {
          log.info("服务重启成功,连接中");
        }
        // 等到服务就绪再重启
        checkService(() => {
          loadingWin.webContents.send("java-ready");
        });
      }
    );
  });
  stop.on('error', (code, data) => {
    log.info('stop.bat 执行 error');
    log.info(code);
    log.info(data);
  });
}
// 终止java进程 并重启服务 linux平台
function stopForLinux() {
  // 获取应用的真实根目录(ASAR 包外的路径)
  const appPath = app.getAppPath();
  log.info(`appPath: ====${appPath}====`);
  let dir = path.join(appPath, '../../stop.sh');
  let stop = child_process.spawn('bash', [dir]);
  // 监听脚本执行
  stop.stdout.on('data', (data) => {
    log.info(`stdout: ${data}`);
  });
  stop.stderr.on('data', (data) => {
    log.info(`stderr: ${data}`);
  });
  stop.on('close', (code) => {
    log.info(`子进程退出, 退出码:${code}`);
    log.info("java进程被终止,准备重启服务");
    child_process.exec(`systemctl --user restart fgv2.service`, (err, out, stde) => {
      log.info('==========');
      log.info(err);
      log.info(out);
      log.info(stde);
      if (err) {
        log.error('重启服务失败:' + err);
        let dir = path.join(appPath, '../../setup_service.sh');
        child_process.exec(`bash "${dir}"`, (error, stdout, stderr) => {
          if (error) {
            log.error('执行失败:' + error);
          }
          log.info(`脚本输出: ${stdout}`);
          log.error(`脚本错误: ${stderr}`);
        });
      }
      if (out) {
        log.info(`重启服务输出: ${out}`);
      }
      if (stde) {
        log.error(`重启服务错误: ${stde}`);
        let dir = path.join(appPath, '../../setup_service.sh');
        child_process.exec(`bash "${dir}"`, (error, stdout, stderr) => {
          // log.info('0000000');
          if (error) {
            log.error('执行失败:' + error);
          }
          log.info(`脚本输出: ${stdout}`);
          log.error(`脚本错误: ${stderr}`);
        });
      }
      // 等到服务就绪再重启
      checkService(() => {
        loadingWin.webContents.send("java-ready");
      });
    });
  });
}
async function createWindow(wait, cb) {
  // Create the browser window.
  win = new BrowserWindow({