Как мне остановить Tomcat, используя shutdown.bat в app.on ("before-quit")? - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь запустить и остановить экземпляр 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

1 Ответ

1 голос
/ 18 апреля 2019

Скорее всего, ваше электронное приложение уже завершено к тому времени, когда ваши события сработали бы. Поэтому больше нет ссылок на ваш порожденный процесс и слушателей.

Вы можете попробовать event.preventDefault(), чтобы отменить выход из приложения. Затем вы можете явно app.quit() как только закончите (но остерегайтесь бесконечного зацикливания вашего слушателя перед выходом; вы можете удалить его или app.exit(0)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...