Электрон открыть и держать открытым cmd.exe

Я создаю небольшой инструмент, который помимо прочего должен позволить мне запустить сервер Tomcat.

Довольно просто, я просто хочу кнопку для запуска startup.bat и еще один позвонить shutdown.bat,

Он работает довольно хорошо (запуск и остановка сервера), но полностью в режиме ниндзя мне не удается получить консоль Tomcat с журналами. Из классической командной строки, если я позвоню startup.batОкно открывается с журналами внутри. Я старался exec, execFile, spawn, Я пытался позвонить напрямую bat, cmd.exeдаже попробовал start, Но я не могу получить окно.

Я знаю, что могу получать потоки, но я не хотел бы беспокоиться об этом.

Кроме того, я просто использую инструмент для Windows, не нужно пока думать о другой платформе.

const ipc = require('electron').ipcMain;
const execFile = require('child_process').execFile;

ipc.on('start-local-tomcat', function (event) {
    execFile('cmd.exe', ['D:\\DEV\\apache-tomcat-8.0.12\\bin\\startup.bat'],
    {env: {'CATALINA_HOME': 'D:\\DEV\\apache-tomcat-8.0.12'}},
    function (error, stdout, stderr) {
        console.log('stdout: ' + stdout);
        console.log('stderr: ' + stderr);
        if (error !== null) {
        console.log('exec error: ' + error);
        }
    })
});

ipc.on('stop-local-tomcat', function (event) {
    execFile('cmd.exe',['D:\\DEV\\apache-tomcat-8.0.12\\bin\\shutdown.bat'],
    {env: {'CATALINA_HOME': 'D:\\DEV\\apache-tomcat-8.0.12'}},
    function (error, stdout, stderr) {
        console.log('stdout: ' + stdout);
        console.log('stderr: ' + stderr);
        if (error !== null) {
        console.log('exec error: ' + error);
        }
    })
});

1 ответ

Решение

Наконец, я просто недостаточно прочел документ, есть параметр detached это будет делать именно то, что я хочу:

var child = spawn(
     'D:\\DEV\\apache-tomcat-8.0.12\\bin\\startup.bat',
     {
         env: {'CATALINA_HOME': 'D:\\DEV\\apache-tomcat-8.0.12'},
        detached: true 
     }
);
Другие вопросы по тегам