javascript - 如何从 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/electron
or./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)
})
解决方案
您可以在节点应用程序https://www.npmjs.com/package/systeminformation中使用此库,并使用其 .processes(cb) 方法找到正在运行的电子应用程序并在 processes 方法的回调中将其杀死。
推荐阅读
- transformation - 如何从 GAMLSS 对象进行逆 orderNorm 变换(bestNormalize 包)?
- reactjs - 将组件作为道具传递给 Route 和在渲染函数中包装组件之间的区别
- github - 如何从浏览器使用 GitHub 代码导航?
- reactjs - In Redux if all reducers are called when an action fires, then what's preventing possible naming conflict among actions?
- python - Add a element from a list and a value from a dictionary in order
- rstudio - RStudio 环境中的蓝色圆圈是什么意思?
- angular - why my app.component.html file is not working?
- c++ - std::lock_guard 如何比 std::mutex::lock() 更快?
- matlab - Add error bars to grouped bar plot in MatLab
- mysql - MySQL与主机有不同的IP?