node.js, windows 7, порождает хром, не может установить каталог пользовательских данных

Я пытаюсь открыть Google Chrome с помощью node.js в Windows 7, используя spawn. Кажется, это работает для всех аргументов, кроме установки 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();
});

Как вы можете видеть в закомментированном коде, он работает до тех пор, пока я не пытаюсь изменить каталог пользовательских данных. Я пробовал разные временные каталоги и устанавливал полный доступ для «всех» во временном каталоге на случай, если это проблема с разрешениями.

Обновление: я только что обновился с версии 0.8.1, кажется, до последней версии 0.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"
    ];

Поэтому я могу подтвердить, что это конкретно связано с Chrome в Windows.


person isimmons    schedule 03.11.2012    source источник
comment
Если кто-то найдет это через Google, причина, по которой ошибки не отображаются, заключается в том, что в коде (например, в примере на nodejs.org) отсутствует прослушиватель событий chrome.on('error', function () { console.log(arguments); });.   -  person Mike 'Pomax' Kamermans    schedule 08.07.2013
comment
Спасибо @Mike'Pomax'Kamermans, от которого я давно отказался. Кажется, более новая версия узла могла решить проблему. Я только что запустил этот код на узле 0.10.10, и он работает. Еще одна новая вещь: C:/some/path работает, но C:\\some\\path больше не работает. Я рад этому, потому что я ненавижу печатать эти обратные косые черты в окнах. В любом случае полезно знать о прослушивателе событий ошибок.   -  person isimmons    schedule 11.07.2013


Ответы (1)


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

20 The system cannot find the device specified.

хотя и не имеет особого смысла

person mihai    schedule 04.11.2012
comment
Спасибо mihai за эту ссылку. Это будет очень удобно, так как я сделал несколько поисков в Google и не смог найти такой список. Однако мне нужно отредактировать вопрос, потому что кажется, что это была всего лишь разовая случайность. Я не могу это воспроизвести. После убийства процессов хрома и повторной попытки я все равно получаю те же результаты, что и раньше. - person isimmons; 05.11.2012