首页 > 解决方案 > 如何从 NodeJs 启动和停止 Electron 应用程序

问题描述

我正在开发一个 NodeJs 应用程序,它可以帮助我公司的开发人员开发我们基于 Electron 的产品。它做了一些自动化,最后,它会自动启动 Electron 应用程序。

从 NodeJs 内部启动 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/electronor./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)
})

标签: javascriptnode.jselectronlaunching-application

解决方案


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


推荐阅读