如何在app.on(“before-quit”)中使用shutdown.bat停止Tomcat?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在app.on(“before-quit”)中使用shutdown.bat停止Tomcat?相关的知识,希望对你有一定的参考价值。

我尝试使用Electron在Windows上启动和停止Tomcat实例。

我修改了electron-quick-start项目以使用批处理文件停止我的Tomcat实例,该文件在所有Electron窗口关闭或应用程序退出之前调用Tomcat的shutdown.bat

但是,当我关闭我的应用程序时,shutdownTomcat.on ("data", ...)shutdownTomcat.on ("exit", ...)听众没有输出。唯一的输出来自我的console.log ("Hello world")app.on ("before-quit", ...)

我选择这种方法是因为我是Electron的新手,想要测试NodeJS的spawn的行为。

当我在app.on ()侦听器之外使用我的代码时,会显示输出,但我的Tomcat实例未被停止。但是,我的startTomcat.bat文件,它调用Tomcat的startup.bat,没有任何问题。

我已经阅读过NodeJS'childProcess'文档(“在Windows上生成.bat和.cmd文件”),但我无法让它工作;这导致了我的问题,即问题出在哪里以及我做错了什么。

我用于主要过程的Main.js文件:

const { app, BrowserWindow } = require('electron');
const { spawn } = require('child_process');
const path = require('path');

const start = path.resolve("./start.bat");
const startTomcat = spawn('cmd.exe', ['/c', start], {
   cwd: process.cwd(),
   detached: true,
});

// ...

app.on('before-quit',()=> {
  const shutdownTomcat = spawn('cmd.exe', ['/c', stop], {
    detached: true
    //  stdio: 'ignore' 
  });

  shutdownTomcat.stdout.on('data', (data) => {
    console.log("This data won't show up...", data);

  });

  shutdownTomcat.stderr.on('data', (data) => {
    console.log(data.toString());
  });

  shutdownTomcat.on('exit', (code) => {
    console.log(`Child Shutdown Tomcat exited with code ${code}`);
  });

  console.log("Hello World");
});

最后,我用来调用Tomcat的stop.bat的批处理文件(shutdown.bat):

cd /D "%~dp0"
cd "..\apache-tomcat\bin"
call shutdown.bat
答案

很可能您的电子申请已经在您的活动被解雇时终止。因此,不再引用您生成的进程和侦听器。

您可以尝试event.preventDefault()取消应用程序退出。然后你可以在完成后明确地使用app.quit()(但要注意无限循环通过你之前退出的监听器;你可以删除它或app.exit(0))。

以上是关于如何在app.on(“before-quit”)中使用shutdown.bat停止Tomcat?的主要内容,如果未能解决你的问题,请参考以下文章

Electron:app.on 'open-file' 的 Windows 替代方案

在 app.on_event('startup') 中连接到数据库与在 FastAPI 中的依赖项之间的区别

电子:app.on('ready') 永远不会被调用

Ionic Capacitor Deploy App on ios 13.3 device freeze splashscreen

我更新了 taget 版本,但我的 App on Store 的兼容性仍然是“Ios 11 或更高版本”

electron