如何在Node.js中在单独的线程上执行DOS命令?

4

我正在使用

var version = shell.exec('D:\\prompt.bat', {silent:false}).output;

使用npm中的Shelljs模块来运行.bat文件。

这个.bat文件会打开iexplore.exe,然后打开Internet Explorer浏览器。

但是问题在于它只能在单个线程上运行,因此除非IE被关闭,否则我的服务器将一直等待而无法处理任何后续请求。

所以请有经验的人建议如何在单独的线程上运行DOS命令,以便它不会影响我的服务器。

提前感谢。:)


如果你没有更好的想法,我建议尝试使用cmd.exe来运行bat文件。 - inf3rno
2个回答

2
你确实可以使用类似 child_processexec 的其他方式来创建异步进程,但是 Node.js 在子进程完成或超时之前仍不会退出。尽管它会继续执行。

示例(源代码):

var exec = require('exec');

exec(['D:\\prompt.bat'], function(err, out, code) {
  if (err instanceof Error)
    throw err;
  process.stderr.write(err);
  process.stdout.write(out);
  process.exit(code);
});

备选且更简单的方法:您可以尝试运行异步CMD代码,而不是在Node.js中解决问题,而是在脚本中解决问题。
例如,将该行更改为:
var version = shell.exec('start D:\\prompt.bat', {silent:false}).output;

或者,您可以在 prompt.bat 中添加命令 start

1
真是的,我浪费了一整天的时间在这个问题上。我之前尝试过但并没有成功,不知道为什么它突然开始工作了 :) :) 非常感谢。 - Rahul
但是我想要执行'C:\Program Files\Internet Explorer\iexplore.exe',而不是exec(['D:\prompt.bat'],function(err, out, code) {...})。如何做到这一点? - Rahul

0

我在评论区找到了自己第二个问题的答案:

将 c:\... 替换成 c:/ 就可以了。:)


这并没有提供问题的答案。如果您想对作者进行批评或请求澄清,请在他们的帖子下留言。 - RobV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接