如何在app.on(“退出前”)中使用shutdown.bat停止Tomcat?

时间:2019-04-17 15:07:53

标签: javascript html node.js electron

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

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

但是,当我关闭应用程序时,shutdownTomcat.on ("data", ...)shutdownTomcat.on ("exit", ...)侦听器没有输出。唯一的输出来自我的console.log ("Hello world")的{​​{1}}。

之所以选择这种方法,是因为我是Electron的新手,并且想测试NodeJS的app.on ("before-quit", ...)的行为。

当我在spawn侦听器之外使用代码时,将显示输出,但我的Tomcat实例并未停止。但是,我的app.on ()文件称为Tomcat的startTomcat.bat,可以正常工作。

我已经阅读了NodeJS的startup.bat'文档(“在Windows上生成.bat和.cmd文件”),但是我无法使其正常运行。这引出了我的问题,即问题出在哪里以及我在做什么错。

我用于主要过程的childProcess文件:

Main.js

最后,我用来调用Tomcat的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"); }); 的批处理文件(stop.bat):

shutdown.bat

1 个答案:

答案 0 :(得分:1)

您的电子应用很可能在事件触发时已经被终止。因此,不再引用您生成的进程和侦听器。

您可以尝试event.preventDefault()取消退出应用程序。然后,您可以在完成操作后显式地app.quit()(但要注意无限循环遍历退出前的侦听器;可以将其删除或app.exit(0))。