【问题标题】:Launch an external application from node.js从 node.js 启动一个外部应用程序
【发布时间】:2013-07-18 21:04:55
【问题描述】:

我正在编写一个使用 node.js 访问本地文件系统的桌面 Web 应用程序。我目前可以使用 node.js 打开文件并将其复制到硬盘上的不同位置。我还想做的是允许用户使用与文件类型关联的应用程序打开特定文件。换句话说,如果用户在 Windows 环境中选择“myfile.doc”,它将使用该文件启动 MSWord。

我一定是术语的受害者,因为除了与 node.js 通信的子进程的产生之外,我什么也找不到。我只想启动一个文件供用户查看,然后让他们决定如何处理它。

谢谢

【问题讨论】:

    标签: windows node.js launching-application


    【解决方案1】:

    你可以这样做

    var cp = require("child_process");
    cp.exec("document.docx"); // notice this without a callback..
    process.exit(0); // exit this nodejs process
    

    不安全的想法,以确保命令显示没有错误或任何不希望的输出

    你应该添加回调参数 child_process.exec(cmd,function(error,stdout,stderr){})

    接下来您可以处理事件,这样您就不会阻止脚本的执行,甚至不会使用外部 node.js 脚本来启动和处理您从“主”脚本生成的进程的输出。

    【讨论】:

    • 谢谢,帮了大忙。不过我不需要添加 process.exit(0),因为包含节点的应用程序不应该消失。
    【解决方案2】:

    在下面的示例中,我使用 textmate "mate" 命令编辑文件 hello.js,您可以使用 child_process.exec 运行任何命令,但您要打开文件的应用程序应该为您提供命令行选项。

    var exec = require('child_process').exec;
    exec('mate hello.js');
    

    【讨论】:

      【解决方案3】:
      var childProcess = require('child_process');
      childProcess.exec('start Example.xlsx', function (err, stdout, stderr) {
              if (err) {
              console.error(err);
              return;
          }
          console.log(stdout);
          process.exit(0);// exit process once it is opened
      })
      

      强调“退出”的调用位置。这可以在 windows 中正确执行。

      【讨论】:

      • 这可以在 ionic2 应用程序的客户端使用吗?构建说它找不到child_process。谢谢
      【解决方案4】:

      只需从命令提示符或以编程方式调用您的文件(任何带有扩展名的文件,包括 .exe):

      var exec = require('child_process').exec;
      exec('C:\\Users\\Path\\to\\File.js', function (err, stdout, stderr) {
          if (err) {
              throw err;
          }
      })
      

      如果你想运行一个没有扩展名的文件,你几乎可以这样做,如下:

      var exec = require('child_process').exec;
      exec('start C:\\Users\\Path\\to\\File', function (err, stdout, stderr) {
          if (err) {
              throw err;
          }
      })
      

      如您所见,我们使用start 打开文件,让窗口(或让我们选择的窗口)选择应用程序。

      【讨论】:

        【解决方案5】:

        如果您更喜欢使用 async/await 模式打开文件,

        const util = require('util');
        const exec = util.promisify(require('child_process').exec);
        
        async function openFile(path) {
          const { stdout, stderr, err } = await exec(path);
          if (err) {
            console.log(err);
            return;
          }
          process.exit(0);
        }
        
        openFile('D:\\Practice\\test.txt'); // enter your file location here
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-03
          • 2022-01-05
          • 2019-07-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多