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

4
我正在开发一个基于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'); 命令,它会输出'The app was terminated',但是应用本身并没有关闭。

我尝试执行 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');时它并没有关闭正在运行的应用程序。
编辑:
我的假设是,Electron启动器实际上生成了一个新的子进程,因此杀死启动器并不会停止实际启动的应用程序。
这是./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)
})

你尝试过'app.quit()'吗? - Patryk Cieszkowski
然后我得到 TypeError:app.quit不是函数 - karlitos
1
你可以在 Electron 应用程序内部完成这个操作。我只是从 NodeJs 脚本中启动了一个 Electron 应用程序。 - karlitos
我尝试执行node_modules/.bin/electron,但是你的代码无法运行。唯一能够运行的是execFile('node', ['path/to/electron/cli.js', './myapp.js'],并且可以成功退出。 - pergy
./myapp.js 是原问题中的 param1 参数,我编辑了我的问题以使其更加明显。 - karlitos
1个回答

1

谢谢您的建议,但我只能将其视为一种解决方法。必须有可能在另一个NodeJs应用程序中启动和停止一个NodeJs应用程序,而无需处理PID。 - karlitos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接