【发布时间】:2019-02-14 21:44:06
【问题描述】:
我正在开发一个 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/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)
})
【问题讨论】:
-
你试过'app.quit()'吗?
-
然后我得到
TypeError: app.quit is not a function -
您可以在电子应用程序中执行此操作。我只是从 NodeJs 脚本启动一个电子应用程序。
-
"我试图执行 node_modules/.bin/electron" 我不能用你的代码。唯一对我有用的是
execFile('node', ['path/to/electron/cli.js', './myapp.js'],它成功退出杀戮。 -
./myapp.js是原始问题中的param1参数,我编辑了我的问题,所以它更明显。
标签: javascript node.js electron launching-application