Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js、windows 7、spawn chrome、can';设置用户数据目录_Windows_Node.js_Spawn - Fatal编程技术网

node.js、windows 7、spawn chrome、can';设置用户数据目录

node.js、windows 7、spawn chrome、can';设置用户数据目录,windows,node.js,spawn,Windows,Node.js,Spawn,我正在尝试使用spawn在Windows 7上打开带有node.js的Google Chrome。它似乎适用于除设置用户数据目录之外的所有参数。但是,--user data dir直接从命令行工作,如果我从节点调用.cmd文件并通过它传递参数,它也可以工作 Chrome在后台打开(显示在任务管理器中),但浏览器窗口没有打开,我必须在任务管理器中手动终止进程才能结束它 我没有发现任何错误或任何问题的迹象 这是我的节点代码: var spawn = require('child_process')

我正在尝试使用
spawn
在Windows 7上打开带有node.js的Google Chrome。它似乎适用于除设置
用户数据目录
之外的所有参数。但是,
--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();
});
正如您在注释掉的代码中看到的,只要我不尝试更改用户数据目录,它就可以工作。我尝试了不同的临时目录,并在临时目录上设置对“everyone”的完全访问权限,以防出现权限问题

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

child process exited with code 20
如何查找此代码以了解其含义

更新2我认为退出代码20只是一次侥幸,因为我无法再复制它了。尝试测试不同的东西有点麻烦,因为我必须记住每次都要在TaskManager中关闭chrome进程,以确保得到相同的结果。因此,它返回到与以前相同的结果,没有错误,但没有chrome窗口,一些运行的chrome进程必须手动终止

更新3 我只是把这个脚本移到Ubuntu上,修改了exe和ARG以反映不同的文件结构,它在Ubuntu上工作

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

因此,我可以确认这与Windows上的Chrome特别相关。

20系统找不到指定的设备。


不过没什么意义

谢谢米海的链接。它会非常方便,因为我在谷歌上搜索了好几次,却找不到这样的列表。然而,我需要编辑这个问题,因为这似乎只是一次侥幸。我无法复制它。在杀死chrome进程并重试之后,我仍然得到与以前相同的结果。如果有人通过google发现了这一点,那么没有显示错误的原因是代码(如nodejs.org上的示例)缺少
chrome.on('error',function(){console.log(arguments);})事件侦听器。谢谢@Mike'Pomax'Kamermans我早就放弃了。node的较新版本似乎已解决此问题。我刚刚在节点0.10.10上运行了这段代码,它运行正常。另一个新功能是C:/some/path工作,但C:\\some\\path不再工作。我为此感到高兴,因为我讨厌在windows中键入那些反斜杠。无论哪种方式,了解错误事件侦听器都是一件好事。
args = [
    "http://www.google.com",
    "--user-data-dir=/home/lotus/testdir"
    ];