2012-11-03 49 views
1

我試圖用spawn在Windows 7上使用node.js打開Goog​​le Chrome。它似乎適用於除設置user-data-dir之外的所有參數。但是,--user-data-dir直接從命令行工作,如果我從節點調用.cmd文件,並通過它傳遞參數,也可以工作。node.js,windows 7,spawn chrome,無法設置用戶數據目錄

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(); 
}); 

正如你可以在註釋掉的代碼中看到它的工作原理,只要我不試圖改變用戶數據目錄。我嘗試了不同的臨時目錄,並設置了對temp目錄中'everyone'的完全訪問權限,以防萬一它是權限問題。

更新:我剛剛從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" 
    ]; 

所以我可以證實,這是專門與Chrome在Windows。

+1

萬一有人發現這個通過谷歌,沒有錯誤顯示的原因是因爲代碼(像nodejs.org的例子)缺少'chrome.on('error',function(){console.log(arguments);});'事件監聽器。 –

+0

感謝@ Mike'Pomax'Kamermans我早已放棄。看起來更新版本的節點可能已經解決了這個問題。我剛剛在節點0.10.10上運行了這個代碼,它可以工作。另一個新東西是C:/ some/path works,但是C:\\ some \\ path不再有效。我很高興,因爲我討厭在Windows中輸入反斜槓。無論哪種方式,瞭解錯誤事件偵聽器都很好。 – isimmons

回答

1

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

20 The system cannot find the device specified.

並沒有多大意義,雖然

+0

謝謝mihai的鏈接。它會很方便,因爲我做了幾次谷歌搜索,並找不到這樣的列表。但是,我需要編輯這個問題,因爲它似乎只是一次僥倖。我無法複製它。在殺死鉻進程並再次嘗試之後,我仍然可以獲得與以前相同的結果。 – isimmons