【问题标题】:node.js, windows 7, spawn chrome, can't set user-data-dirnode.js, windows 7, spawn chrome, 无法设置用户数据目录
【发布时间】:2012-10-24 02:01:48
【问题描述】:

我正在尝试使用spawn 在 Windows 7 上使用 node.js 打开 Google 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();
});

正如您在注释掉的代码中看到的那样,只要我不尝试更改用户数据目录,它就可以工作。我尝试了不同的临时目录,并在临时目录上设置了对“每个人”的完全访问权限,以防出现权限问题。

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

child process exited with code 20

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

更新 2 我认为退出代码 20 只是一次侥幸,因为我无法再重现它了。尝试测试不同的东西有点麻烦,因为我必须记住每次都在任务管理器中杀死 chrome 进程以确保我得到相同的结果。所以它又回到了和之前一样的结果,没有错误但没有chrome窗口,并且一些正在运行的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 相关。

【问题讨论】:

  • 如果有人通过 google 找到这个,没有错误显示的原因是代码(如 nodejs.org 上的示例)缺少 chrome.on('error', function () { console.log(arguments); }); 事件监听器。
  • 谢谢@Mike'Pomax'Kamermans 我早就放弃了。似乎较新版本的节点可能已经解决了这个问题。我刚刚在节点 0.10.10 上运行了这段代码,它可以工作。另一件新事物是 C:/some/path 有效,但 C:\\some\\path 不再有效。我很高兴,因为我讨厌在 Windows 中输入那些反斜杠。无论哪种方式,了解错误事件侦听器都很好。

标签: windows node.js spawn


【解决方案1】:

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

20 The system cannot find the device specified.

虽然没有多大意义

【讨论】:

  • 感谢 mihai 提供的链接。它会派上用场,因为我做了几次谷歌搜索,但找不到这样的列表。但是,我需要编辑这个问题,因为这似乎只是一次侥幸。我无法重现它。杀死 chrome 进程并再次尝试后,我仍然得到与以前相同的结果。
猜你喜欢
  • 1970-01-01
  • 2012-12-11
  • 2012-02-15
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2020-10-19
相关资源
最近更新 更多