我正在开发一个NodeJs应用程序,该应用程序可以帮助我们公司的开发人员开发基于Electron的产品。它会进行一些自动化,最后会自动启动Electron-app。
从NodeJ内部启动Electron应用程序不是问题。通常,应用程序是使用bash脚本启动的,如下所示:
#!/bin/sh
HOME=$PWD/home-dir ./node_modules/.bin/electron myAppDir
myAppDir
是我的Electron-App的目录,也可以是 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)
})
答案 0 :(得分:0)
您可以在节点应用https://www.npmjs.com/package/systeminformation中使用此库,并通过其.processes(cb)方法找到正在运行的电子应用并在处理方法的回调中将其杀死。