javascript - 如何在 app.on(“退出前”)中使用 shutdown.bat 停止 Tomcat?
问题描述
我尝试使用 Electron 在 Windows 上启动和停止 Tomcat 实例。
我已经修改了electron-quick-start
项目以使用批处理文件停止我的 Tomcat 实例,该批处理文件shutdown.bat
在所有 Electron 窗口关闭时或在我的应用程序退出之前调用 Tomcat。
shutdownTomcat.on ("data", ...)
但是,当我关闭我的应用程序时,和shutdownTomcat.on ("exit", ...)
监听器没有输出。唯一的输出console.log ("Hello world")
来自我的app.on ("before-quit", ...)
.
我选择这种方法是因为我是 Electron 的新手,并且想测试 NodeJSspawn
的行为。
当我在侦听器之外使用我的代码时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");
});
stop.bat
最后,我用来调用 Tomcat 的批处理文件 ( ) shutdown.bat
:
cd /D "%~dp0"
cd "..\\apache-tomcat\\bin"
call shutdown.bat
解决方案
很可能您的电子应用程序在您的事件触发时已经终止。因此不再引用您生成的进程和侦听器。
您可以尝试event.preventDefault()
取消应用退出。然后,您可以app.quit()
在完成后显式地执行(但请注意在退出前的侦听器中无限循环;您可以将其删除或app.exit(0)
)。
推荐阅读
- php - 来自 ajax 页面的值仅在 jquery 的第二次尝试中获得
- three.js - THREE.js 根据 mp3 中的数据改变平面的顶点
- kubernetes - 如何使用组类型查看主题成员
- elasticsearch - logstash cron 计划从特定时间开始每 12 小时运行一次
- corda - Corda 信用证演示不工作
- python - 比循环和调用循环和调用另一个函数的函数更好的方法
- c - 打印传递给 pthread_create 的参数
- c# - 缺少字段的 CsvHelper 列表
- angular6 - 我们如何在上下文菜单操作中增加 ag-grid 数据的大小?
- c# - TripleDES 加密和解密给出了奇怪的结果