Я пытаюсь запустить и остановить экземпляр Tomcat в Windows, используя Electron.
Я изменил проект electron-quick-start
, чтобы остановить мой экземпляр Tomcat с помощью пакетного файла, который вызывает Tomcat shutdown.bat
, когда все окна Electronзакрыты или перед выходом из моего приложения.
Однако, когда я закрываю свое приложение, от слушателей 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
' («Создание файлов .bat и .cmd в Windows»),но я не могу заставить его работать;что приводит к моему вопросу, а именно, где проблема и что я делаю неправильно.
Мой 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's shutdown.bat
:
cd /D "%~dp0"
cd "..\\apache-tomcat\\bin"
call shutdown.bat