我尝试使用 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/