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>


相关文章
|
4月前
|
JavaScript 前端开发 Shell
Nodejs 第十五章(child_process)
Nodejs 第十五章(child_process)
24 0
|
5月前
|
JSON JavaScript 数据格式
在uni-app项目里使用node服务实现模拟接口
在uni-app项目里使用node服务实现模拟接口
41 1
|
7月前
App Inventor 2 模拟sleep函数
App Inventor 2 原生没有 sleep 及相关函数,需要模拟实现,经过测试这里给出一个既简单又相对高效率的实现方案,经过测试,该方法有效,能正常 sleep 指定的毫秒数,但是它是阻塞式的,也就是说等待的过程中其他界面操作均无法进行,不过好在CPU消耗并不高,也算是一种不错的实现方式。
133 0
App Inventor 2 模拟sleep函数
|
12月前
|
负载均衡 JavaScript 算法
Node.js入门之process模块、child_process模块、cluster模块
本文主要介绍node中跟进程相关的三个模块。process是node的全局模块,作用比较直观。可以通过它来获得node进程相关的信息,child_process主要用来创建子进程,可以有效解决node单线程效率不高的问题。cluster是node的集群模块,提供了开箱即用的进程创建功能。
346 0
|
JavaScript 前端开发
Node.js子进程 child_process
Node.js子进程 child_process
111 0
|
Shell C#
C#使用Process打开外部程序或外部文件的使用总结
执行一个外部的第三方应用的原理,和调用cmd执行命令是一样的,只不过可以添加程序的启动参数(`StartInfo.Arguments`)等。调用第三方应用,在其启动后,关于程序的操作、处理、是否...
1437 0
C#使用Process打开外部程序或外部文件的使用总结
|
安全 测试技术 数据安全/隐私保护
在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解
在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解
在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解
|
JavaScript 前端开发 Shell
在child_process域和错误的冒泡和捕获实践【Note.js】
在child_process域和错误的冒泡和捕获实践【Note.js】
|
iOS开发
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
348 0
|
JavaScript 网络协议 Shell
在nodejs中创建child process
在nodejs中创建child process