从node.js启动外部应用程序

时间:2013-07-18 21:04:56

标签: windows node.js launching-application

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

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

由于

4 个答案:

答案 0 :(得分:16)

你可以这样做

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脚本来启动和处理你从“主”脚本产生的进程的输出。

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

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中正确执行。

答案 3 :(得分:0)

通过命令提示符或以编程方式简单地调用文件(任何扩展名包括.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打开文件,让窗口(或允许我们的窗口)选择一个应用程序。