electron使用child_process打开外部应用

简介: electron使用child_process打开外部应用

1.安装child_process


npm install child_process --save
复制代码


child_process 子进程


在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。熟悉shell脚本的同学,可以用它来完成很多有意思的事情,比如文件压缩、增量部署等,nodejs创建子进程有四种方法,分别是spawnforkexecexecFile


区别 :


  1. 格式 : spawn和execFile的格式都是(command,[args]);fork的参数直接(文件名);exec的command相当于spawn的command+args;
  2. 回调 : spawn和fork没有直接的回调。spawn通过事件监听处理; fork相当于直接执行一个node程序;其余两个有回调,回调的参数为error,stdout,stderr;
  3. 作用 : [这里我也不是很明白,引用网上的],fork用于启动一个node进程,可以进程进程之间通信;execFile用于执行一个外部应用;spawn方法会在新的进程执行外部应用;exec这个方法将会生成一个子shell,能够在shell中执行命令。


2. 在package.json指向的主进程中


// 控制应用生命周期和创建原生浏览器窗口的模组
const {
    ipcMain
} = require('electron')
// 多进程测试
const cp = require("child_process")
let mySpawn = new Array()
ipcMain.on('open-apifox', (e, msg) => {
    console.log('打开进程 -> mainProcess:' + msg)
    const spawn = cp.spawn(msg)
    cps[cps.length] = spawn
    e.sender.send('cp-reply', '打开进程:' + msg)
})
ipcMain.on('kill-apifox', (e, msg) => {
    console.log('关闭进程 -> mainProcess:' + msg)
    e.sender.send('cs-reply', '正在关闭所有打开的应用')
    // 收到消息,关闭所有进程
    for(i = 0; i < cps.length; i++) {
        cps[i].kill()
    }
    cps = new Array()
})
复制代码


ipcMain 模块是类EventEmitter的实例.当在主进程中使用它的时候,它控制着由渲染进程(web page)发送过来的异步或同步消息.从渲染进程发送过来的消息将触发事件.详细说明请查看www.cnblogs.com/zyl-Tara/p/…


**3. 在render渲染层中,触发事件引用外部的exe应用


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div style="font-weight: bolder">3.打开外部程序,并监听消息</div>
    <div class="form-group">
        <input class="form-control" type="text" name="txt_exe" id="openApifox" style="width:600px"
            placeholder="输入带路径的外部程序的名称" value="D:\apifox\apifox.exe" />
        <div><button onclick="ChildProcess(true)">打开应用</button> <button onclick="ChildProcess(false)">关闭所有应用</button>
        </div>
    </div>
</body>
<script>
    const ipcRenderer = require('electron').ipcRenderer
    ipcRenderer.on('cs-reply', (e, msg) => document.getElementById('openApifox').value = msg )
    function ChildProcess(isopen) {
        // 发消息,由html的按钮调用,给主进程发消息,回调中关闭进程
        let appname = ""
        if (isopen) {
            appname = document.getElementById('openApifox').value
            console.log(appname)
            ipcRenderer.send('open-apifox', appname)
        } else ipcRenderer.send('kill-apifox', appname)
    }
</script>
</html>


相关文章
|
20天前
|
容器 iOS开发 Linux
震惊!Uno Platform 响应式 UI 构建秘籍大公开!从布局容器到自适应设计,带你轻松打造跨平台完美界面
【8月更文挑战第31天】Uno Platform 是一款强大的跨平台应用开发框架,支持 Web、桌面(Windows、macOS、Linux)及移动(iOS、Android)等平台,仅需单一代码库。本文分享了四个构建响应式用户界面的最佳实践:利用布局容器(如 Grid)适配不同屏幕尺寸;采用自适应布局调整 UI;使用媒体查询定制样式;遵循响应式设计原则确保 UI 元素自适应调整。通过这些方法,开发者可以为用户提供一致且优秀的多设备体验。
32 0
|
10月前
|
Web App开发 前端开发 JavaScript
用electron打包前端应用初体验
用electron打包开发桌面应用遇到的各种问题和解决办法
145 1
|
缓存 JavaScript 前端开发
从0到1构建跨平台Electron应用,这篇文章就够了
Electron是一个可以直接开发构建跨平台应用的库,简单、快捷。 《Electron从0到1构建跨平台应用》这篇文章,我摘录了我自己在真实项目中,从开发到生成安装包的要点。
771 0
|
Linux iOS开发 MacOS
使用Electron生成安装包并打包为不同平台的应用格式
导言: 使用Electron开发桌面应用后,我们需要将其打包成适用于不同平台的安装包,例如 Mac 的`dmg`和 Windows 的`exe`。本文将介绍如何使用 Electron-forge 自动生成项目文件,并通过简单的步骤实现打包过程。
5655 0
|
存储 监控 JavaScript
如何治理 Electron 版本淘宝直播应用崩溃?
如何治理 Electron 版本淘宝直播应用崩溃?
11504 0
|
存储 监控 前端开发
如何打造高质量的 Electron 应用?
如何打造高质量的 Electron 应用?
320 0
|
存储 监控 JavaScript
如何治理 Electron 版本淘宝直播应用崩溃?
经过几个月的努力,基于Electron框架开发的新版淘宝直播推流软件终于上线了。随之而来的就是线上用户反馈的各种问题,其中最影响用户体验的当属应用崩溃问题了。当应用程序出现未 catch 的异常时就会发生崩溃,本文介绍了客户端应用崩溃的处理流程。
939 0
如何治理 Electron 版本淘宝直播应用崩溃?
|
前端开发
Electron入门教程4 —— 切换应用的主题
Electron入门教程4 —— 切换应用的主题
279 0
Electron入门教程4 —— 切换应用的主题
|
资源调度 JavaScript 前端开发
如何使用Vue + Electron搭建跨平台应用
• Electron: 使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架 • Vue.js: Web 前端用于构建用户界面的渐进式框架 • Vuetify: Vue.js 的 Material Design 组件框架 看完以上介绍,也明白了本文要做的事:用 Vue.js 与 Vuetify 组件,基于 Electron 来创建原生桌面应用。
349 0
如何使用Vue + Electron搭建跨平台应用
|
缓存 Linux iOS开发
不联网的情况下,使用 electron-builder 快速打包全平台应用
Electron 之所以能够日益风靡,是因为其简单易用且对各个操作平台具有良好的支持。
725 0
不联网的情况下,使用 electron-builder 快速打包全平台应用