【问题标题】:Angular & Electron - Execute external applicationAngular 和 Electron - 执行外部应用程序
【发布时间】:2021-01-17 22:37:34
【问题描述】:

我从电子和角度开始。

我正在尝试执行一个外部应用程序。 假设 pks.exe 在 c:\kube\

我没有清楚地发现是否有办法做到这一点。 我尝试使用 ngx-electron 库。我可以使用 openPath api 打开诸如记事本或 word 文档之类的东西。但它的目的并不是仅仅打开一个文件就可以执行某些东西(甚至更多是使用参数),就像我点击它两次一样。

我还看到人们在谈论 child_process。但我没有设法让它与角度一起工作。它似乎只适用于 nodejs。

有解决办法吗?

【问题讨论】:

  • 这能回答你的问题吗? Electron: run shell commands with arguments
  • 不,这个答案是关于 nodejs 的。在我的问题中,我告诉它没有角度工作。当我编译时,它会说无法导入 child°process 模块。

标签: angular electron


【解决方案1】:

好吧,基本上回答得更详细一点:

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_processhttps://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);
});

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

【讨论】:

  • 太好了……我现在很清楚了。而且......现在它正在工作。非常感谢。
猜你喜欢
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2022-10-18
  • 2016-08-11
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多