【问题标题】:How to run an executable on client-side using Node.js?如何使用 Node.js 在客户端运行可执行文件?
【发布时间】:2015-11-23 14:24:12
【问题描述】:

有没有办法在客户端调用外部程序并与之“对话”?

例如,如果我有一个 Node.js 服务于 AngularJS 或任何其他框架,我希望用户按下浏览器上的一个按钮,客户端上先前安装的程序开始运行并发送回客户端一些消息...

我能做到吗?

【问题讨论】:

  • 如果您还为用户使用的浏览器编写客户端应用程序和扩展程序/插件,以使您的 web 应用程序与桌面应用程序对话,则可以。
  • 执行此类操作的一种方法是通过安装应用程序时设置的自定义协议链接。例如,您可以通过steam://friends 之类的链接启动 Steam 好友窗口。用户必须允许此操作。至于在用户机器上运行任意可执行文件,那是不可能的(也不安全)。
  • 我会考虑结合使用socket.io 和节点进程require('child_process').exec。后者具有事件发射器,您可以轻松地将其连接到套接字以跟踪本​​机可执行文件的进度
  • @ShanShan 我实际上是因为它们的不稳定性而想逃离扩展......
  • @Joe 我想到了,但随后该进程将在服务器端运行,不是吗?它只是由客户调用。我希望该过程在客户端计算机上运行。就像一个 C++ 应用程序。

标签: javascript angularjs node.js


【解决方案1】:

浏览器无法在没有明确配置的情况下在本地机器上运行可执行文件,因为这种行为会违反安全限制。

Node.js 可以做任何运行它的环境(例如用户权限)允许的事情。见:https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

【讨论】:

    【解决方案2】:

    考虑使用 Native Client

    Native Client 是一个沙盒,用于在浏览器中高效、安全地运行编译后的 C 和 C++ 代码,独立于用户的操作系统。 Portable Native Client 以独立于架构的方式扩展了该技术,让开发人员只需编译一次代码即可在任何网站和任何架构上运行,并提供提前 (AOT) 翻译。

    简而言之,Native Client 为现代 Web 浏览器带来了本机代码的性能和低级控制,而不会牺牲 Web 的安全性和可移植性。

    https://developer.chrome.com/native-client

    【讨论】:

      【解决方案3】:

      这肯定有很多不同的方式。

      一种是使用 node webkit。

      另一个,一个名为 Edge 的 NPM 包。这有点像节点和.net 之间的桥梁。或者更具体地说,节点和 clr 进程。您可以在 clr 进程中执行 c# 语句并加载程序集,并通过 node 和 Edge 在 javascript 中与之交互。

      https://github.com/tjanczuk/edge

      【讨论】:

        【解决方案4】:

        我认为更好的形式是使用 API REST,例如,您可以在节点 JS 中创建服务器 API,并使用 AngularJS 在浏览器和桌面应用程序中使用 JAVA 或 .NET 中的服务

        以下是一个简单的Example 使用 Node 和 Angular

        【讨论】:

        • 我开始使用 Node 和 Angular。但是我怎样才能让他们(尤其是客户端)与 JAVA 或 .NET 交谈?
        • 要使用 :NET 框架或在 JAVA 中编写 WEB 应用程序,您需要经验,仅使用教程非常困难,因为其中许多是针对浏览器应用程序而不是 Destok;为什么您需要客户端应用程序不在浏览器中运行?
        • 我需要 webapp 与桌面 c# 应用程序交换消息。我需要一些 Javascript 无法获取的信息存储在计算机中:/
        • 如果信息在一个文件夹中,您可以使用 javascript 并在客户端运行应用程序(在您需要信息的文件夹中)在这种情况下,您可以访问客户端中的信息另一方面,如果你知道 C#,你可以使用 .NET 是 C# 的框架
        猜你喜欢
        • 1970-01-01
        • 2017-05-15
        • 2015-03-19
        • 2011-07-02
        • 1970-01-01
        • 2014-05-10
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多