从Nodejs服务器执行cmd.exe

时间:2016-07-12 08:46:18

标签: node.js windows cmd

环境: 运行Vagrant和VirtualBox的Windows主机 安装了Vagrant的Ubuntu 64 Vagrant Box NodeJS在Vagrant框上运行

您好,我想知道是否可以在Vagrant Box中运行'cmd.exe'?例如。在Vagrant Box上运行Nodejs http服务器,然后浏览到Windows主机上的localhost:8888(我现在看到我的Hello world),然后单击一个按钮,例如'run cmd.exe'在Windows主机上打开cmd.exe? child_process(link)在我的场景中是否可用?

如果可能,代码是否应该在localexec.js文件中?

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

我发现其他答案可以回答它是可能的,但据我所知,当它安装在Windows主机上并且从Windows主机运行而不是从外部VirtualBox NodeJS服务器运行时,它才可能来自NodeJs? 感谢

1 个答案:

答案 0 :(得分:1)

这可以通过使用RPC(远程过程调用)来完成,你必须在Windows环境中有一个服务器端然后你可以使用这个包:dnode,它允许你听接收函数,使用这些函数你可以调用命令到cmd并从你的nodejs盒装vm中获取stdout,你不能从系统内部进行通信,因为虚拟机是沙箱,来自dnode docs:

//Server-Side
var dnode = require('dnode');
var server = dnode({
    transform : function (s, cb) {
        cb(s.replace(/[aeiou]{2,}/, 'oo').toUpperCase())
    }
});
server.listen(5004);

//Client-Side
var dnode = require('dnode');

var d = dnode.connect(5004);
d.on('remote', function (remote) {
    remote.transform('beep', function (s) {
        console.log('beep => ' + s);
        d.end();
    });
});

Ps:dnode允许您执行任何类型的代码:)