node.js,windows 7,spawn chrome,无法设置user-data-dir

时间:2012-11-03 17:34:21

标签: windows node.js spawn

我正在尝试使用spawn在Windows 7上使用node.js打开Goog​​le Chrome。除了设置user-data-dir之外,它似乎适用于所有参数。但是,--user-data-dir直接从命令行工作,如果我从节点调用.cmd文件,并通过它传递参数,也可以工作。

Chrome会在后台打开(在任务管理器中显示),但浏览器窗口无法打开,我必须手动终止任务管理器中的进程才能结束它。

我没有错误或任何问题的迹象。

这是我的节点代码:

var spawn  = require('child_process').spawn;
var exe = 'C:\\Program Files\\Google\\Chrome\\application\\chrome.exe';


//this does not work and gives no errors just starts chrome in the background but fails to open browser window
// var args = [
//      '--user-data-dir=C:\\Windows\\Temp\\testingdir',
//      'http://www.google.com'
//  ];

//actual output from running this through a .cmd file and echoing out the arguments
// --user-data-dir=C:\Windows\Temp\testingdir http://www.google.com
//running the above arguments through a .cmd file from nodejs or manually running them in the cli works



//this works from nodejs, other arguments work too, just not the --user-data-dir argument
// var args = ['http://www.google.com'];

chrome = spawn(exe, args);


chrome.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

chrome.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

chrome.on('exit', function (code) {
  console.log('child process exited with code ' + code);
  // chrome.kill();
});

正如您在注释掉的代码中看到的那样,只要我不尝试更改user-data-dir,它就能正常工作。我尝试了不同的临时目录,并在临时目录中设置对“所有人”的完全访问权限,以防它出现权限问题。

更新:我刚刚从v0.8.1更新到最新的v0.8.14,现在当它失败时,on('exit', function())实际上会返回一个代码。

child process exited with code 20

如何查找此代码以了解其含义?

更新2 退出代码20我认为只是一次性的侥幸,因为我无法重现它。尝试测试不同的东西有点儿麻烦,因为我必须记住每次都杀死任务管理器中的chrome进程以确保我得到相同的结果。所以它回到了和以前一样的结果,没有错误但没有镀铬窗口,还有一些必须手动杀死的镀铬进程。

更新3 我刚刚将这个脚本移到Ubuntu并更改了exe和args以反映不同的文件结构,它适用于Ubuntu。

exe = "/opt/google/chrome/google-chrome"

args = [
    "http://www.google.com",
    "--user-data-dir=/home/lotus/testdir"
    ];

所以我可以确认这与Windows上的Chrome格式有关。

1 个答案:

答案 0 :(得分:1)

http://www.hiteksoftware.com/mize/Knowledge/articles/049.htm

20 The system cannot find the device specified.

虽然

没有多大意义