Я работаю над приложением NodeJs, которое помогает разработчикам моей компании в разработке нашего продукта на основе Electron. Он выполняет некоторую автоматизацию и в конце автоматически запускает приложение Electron.
Запустить приложение Electron изнутри NodeJs не проблема. обычно приложения запускаются с помощью сценария bash, который выглядит так:
#!/bin/sh
HOME=$PWD/home-dir ./node_modules/.bin/electron myAppDir
myAppDir - это каталог с моим электронным приложением, также может быть файлом 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');.
Обновлено:
Я предполагаю, что электронная пусковая установка фактически порождает новый подпроцесс, таким образом, уничтожение пусковой установки не останавливает фактическое запущенное приложение.
Это содержимое ./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)
})
Потом получаю TypeError: app.quit is not a function
Вы можете сделать это из электронного приложения. Я просто запускаю электронное приложение из сценария NodeJs.
«Я пытался выполнить node_modules / .bin / electronics», но не смог с вашим кодом. Единственное, что у меня сработало, это execFile('node', ['path/to/electron/cli.js', './myapp.js'], и он успешно завершает работу.
./myapp.js был параметром param1 в исходном вопросе, я отредактировал свой вопрос, чтобы он стал более очевидным.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать эту библиотеку в приложении узла https://www.npmjs.com/package/systeminformation и с помощью его метода .processes (cb) найти запущенное электронное приложение и убить его в обратном вызове метода процессов.
Спасибо за ваше предложение, но я бы принял это как обходной путь. Должна быть возможность запускать и останавливать одно приложение NodeJs из другого приложения NodeJs без необходимости иметь дело с идентификаторами PID.
Вы пробовали app.quit ()?