javascript - 如何在 app.on ("before-quit"中使用 shutdown.bat 停止 Tomcat?

标签 javascript html node.js electron

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

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

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

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

当我在 app.on () 监听器之外使用我的代码时,会显示输出但我的 Tomcat 实例不会停止。但是,调用 Tomcat 的 startup.bat 的我的 startTomcat.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 的 shutdown.bat 的批处理文件 (stop.bat):

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

最佳答案

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

您可以尝试使用 event.preventDefault() 来取消应用程序退出。然后你可以显式地 app.quit() 一旦你完成了(但要小心无限循环你的 before-quit 监听器;你可以删除它或 app.exit(0)).

关于javascript - 如何在 app.on ("before-quit"中使用 shutdown.bat 停止 Tomcat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55730795/

相关文章:

javascript - 内部带有按钮或跨度的输入字段

javascript - 使用 javascript 和 AJAX 将 html 文件插入到我的主 html 文件中的 DIV id

html - 跨源请求被 Firefox 上的 HTML5 缓存 list 阻止

angularjs - Angular 应用程序无法在 Windows 操作系统中打开

ios - Node.js socket.io 不响应 iOS socket.io 发出请求

javascript - 将自定义参数传递给 ajax 请求并返回相同的响应

javascript - 如何正确地允许 Node js 有机会在我的无限 while 循环中运行其异步事件

javascript - 所选文本在 640 像素或更小的视口(viewport)中逐渐消失

node.js - Nodejs,mongodb - 使用 $nin 或 $in 作为对象 ID 或 _id

javascript - Jquery 单击交互式图像映射不适用于 chrome