Я работаю над приложением NodeJs, которое помогает разработчикам в моей компании в разработке нашего продукта на базе Electron. Он выполняет некоторую автоматизацию и в конце автоматически запускает приложение Electron.
Запуск приложения Electron из NodeJs не является проблемой. обычно приложения запускаются с помощью bash-скрипта, который выглядит следующим образом:
#!/bin/sh
HOME=$PWD/home-dir ./node_modules/.bin/electron myAppDir
myAppDir
- это каталог моего Electron-приложения, также может быть файл JavaScript .
Стоит отметить, что ./node_modules/.bin/electron
это просто символическая ссылка на ./node_modules/electron/cli.js
Я сделал следующее:
const app = execFile('/the/path/to/the/bash/script', [], {
windowsHide: true,
},(error, stdout, stderr) => {
if (error) {
throw error;
}
warn('The app was terminated');
});
Это прекрасно запускает приложение. Однако, если я сделаю app.kill('SIGTERM');
, он выдаст 'Приложение было остановлено' , но само приложение не закрывается.
Я попытался выполнить node_modules/.bin/electron
или ./node_modules/electron/cli.js
вместо:
const app = execFile('/the/path/to/node_modules/.bin/electron', ['myAppDir'], {
windowsHide: true,
detached: true,
env: {
HOME: 'path/to/home'),
}
Я могу запустить приложение Electron, но снова - оно не закрывает работающее приложение, когда я делаю app.kill('SIGTERM');
EDIT:
Я предполагаю, что электронная пусковая установка фактически порождает новый подпроцесс, таким образом, уничтожение пусковой установки не останавливает фактическое запущенное приложение.
Это содержимое ./node_modules/.bin/electron
(или ./node_modules/electron/cli.js
соответственно)
#!/usr/bin/env node
var electron = require('./')
var proc = require('child_process')
var child = proc.spawn(electron, process.argv.slice(2), {stdio: 'inherit'})
child.on('close', function (code) {
process.exit(code)
})