Angular 和 Electron - 执行外部应用程序

标签 angular electron

我从 Electron 和 Angular 开始。
我正在尝试执行外部应用程序。
假设 pks.exe 在 c:\kube\
我没有清楚地发现是否有办法做到这一点。
我尝试使用 ngx-electron 库。我可以使用 openPath api 打开诸如记事本或 word 文档之类的东西。但它的目的并不是仅仅打开一个文件就可以执行某些操作(甚至更多是使用参数),就像我单击它两次一样。
我还看到人们在谈论 child_process。但我没有设法让它与 Angular 一起工作。似乎它只适用于nodejs。
有解决办法吗?

最佳答案

好的,基本上可以更详细地回答:
Electrun 是一个多进程架构。基本上,有 2 个进程,main processes这是一个 nodeJS 进程和 renderer process这是一个运行 chromium 的 BrowserWindow。 https://www.electronjs.org/docs/tutorial/application-architecture#differences-between-main-process-and-renderer-process
Angular 在 renderer 中运行.由于这基本上是浏览器环境,因此您只能执行在正常浏览器上下文中也可以工作的 javascript 代码。在浏览器中,您不能执行直接在您的 PC 上打开应用程序的脚本或类似 shell 脚本的东西。那将是一场安全噩梦(想象一下访问一个网站,然后该网站可以在您的 PC 上执行任意脚本。它们可以运行 rm -rf / 或像例如 1000 个 word.exe 实例一样打开)。您可以通过 mailto: 间接打开一些应用程序或 tel:链接等...
由于main进程正在运行 nodeJS,您可以包含标准 nodeJS 库,如 child_process https://nodejs.org/api/child_process.html .
所以要让东西为你工作:
在您的代码中,您应该从 renderer 转发打开外部应用程序的请求。 ( Angular )处理到main (nodeJS)进程。结帐https://www.electronjs.org/docs/api/ipc-mainhttps://www.electronjs.org/docs/api/ipc-renderer关于如何具体做到这一点。
Angular (一些 service.tscomponent.ts )

ipcRenderer.send('open_app', 'c:\kube\');
NodeJS 进程(index.js 您还可以在其中创建初始 BrowserWindow)
ipcMain.on('open_app', (event, path) => {
    // path contains 'c:\kube\'
    child_process.spawn(path);
});

为了完整性:也可以直接执行一些mainrenderer 中处理函数通过 remote模块 https://www.electronjs.org/docs/api/remote .但我建议将进程单独的代码保留在相应的进程中,并仅通过 IPC 进行通信。如果您选择仅交付 web 应用程序,这使得支持在没有 Electron 的情况下运行的标准 web 应用程序变得更加容易。

关于Angular 和 Electron - 执行外部应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64168362/

相关文章:

angular - 找不到模块 : Error: Can't resolve 'module

Angular 2 : Default checked on checkbox in ngFor

javascript - 如何在 electron js 中运行后台服务?

javascript - svelte如何在日期和待办事项文本之间留空格?

javascript - ELECTRON - 加载包含脚本标签的本地 HTML 文件

javascript - 具有多个组件渲染的动态加载器组件

angular - react 形式 - 禁用属性

java - 如何根据测验应用程序的管理操作向最终用户加载问题和答案集

node.js - 语法错误: Unexpected token … in serialport in node_modules

node.js - 在 Nodejs 中从套接字接收大量二进制数据