【问题标题】:Elevating NodeJS ChildProcess created with child_process.fork()提升使用 child_process.fork() 创建的 NodeJS ChildProcess
【发布时间】:2019-08-09 05:53:48
【问题描述】:

我正在开发一个下载软件的电子应用程序。但是,对于以“程序文件”为目标的用户,安装需要以管理员权限运行。

我正在创建一个子进程,安装程序使用 child_process.fork() 在其中运行,并且依赖于 IPC 连接来发送和接收消息。

不幸的是,我找不到任何方法来提升这个过程。一些库(例如 node-windows)在底层使用 child_process.exec(),但这不会创建 IPC 连接。

最好的方法是什么?

【问题讨论】:

    标签: node.js child-process elevated-privileges


    【解决方案1】:

    最简单的选择是以管理员身份运行整个应用程序。
    您可以强制(或政治正确,提醒)用户以管理员身份运行。
    例如。在electron-builder"requestedExecutionLevel": "requireAdministrator"

    如果您只想提升子进程,您可以让这个子进程足够聪明以请求提升,或者使用“电梯”,即请求提升的额外程序。

    Node-windows 使用 VBS script 来实现这一点

    electron-react-boileplate 使用预编译程序 elevate 进行此操作

    此外,node-powershell 支持在必要时使用提升(基本 powershell)执行命令。

    至于IPC,你追求什么? child_process.exec 缓冲输出,而child_proces.spawn 以类似流的方式将其提供给您(请参阅child process

    您只需要提供带有正确参数的回调。 来自child process的示例:

    const { exec, spawn } = require('child_process');
    exec('my.bat', (err, stdout, stderr) => {
      if (err) {
        console.error(err);
        return;
      }
      console.log(stdout);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多