如何从NodeJs启动和停止Electron应用程序

时间:2018-09-10 12:42:08

标签: javascript node.js electron launching-application

我正在开发一个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)
})

1 个答案:

答案 0 :(得分:0)

您可以在节点应用https://www.npmjs.com/package/systeminformation中使用此库,并通过其.processes(cb)方法找到正在运行的电子应用并在处理方法的回调中将其杀死。