2012-03-16

[windows] ポータブル版 Google Chrome を自作する

USBメモリに入れて持ち運びながら使えるポータブル版 Google Chrome 的な何かは、PortableApps.com や、SRWare Iron のポータブル版 などがありますが、他人のいじったバイナリはなんとなく不気味なので何とかしたいところです。そこで自分で簡単に作る方法が分かったのでメモしておきます。

Chrome 本体を取得する方法はとりあえず深く考えずに 公式サイト からインストールし、それを拝借することとします。インストール先は %LOCALAPPDATA%\Google\Chrome です。%...% で表される環境変数はエクスプローラでも展開されるのでこのアドレスで簡単にアクセスできます。このフォルダをUSBメモリーにコピーして、たとえば F:\Chrome とします。

chrome.exe はレジストリから起動するべき最新のバージョンを表す文字列を取得するようですが、全く Chrome が存在しない環境ではバージョンを取得できないので、こんなエラーが Chrome\Application\debug.log に出て、エラーダイアログも何も表示されず正常に起動しません。

[0316/121113:ERROR:client_util.cc(319)] Could not get Chrome DLL version.
[0316/121113:ERROR:client_util.cc(356)] Could not find exported function RelaunchChromeBrowserWithNewCommandLineIfNeeded

このエラーは --chrome-version="17.0.963.79" というスイッチで明示的にバージョンを指定することで回避できました。

加えて、--user-data-dir を chrome.dll からの相対パスで指定することで、F:\Chrome\User Data に履歴やクッキーなどのプロファイルが書き込まれていい感じに動作しました。蛇足ですが Chrome 内でバックグラウンドアプリケーションが動いていると chrome.exe が常駐するようになって、通知領域のアイコンから終了しないと正常にアンマウントできないので注意が必要です。

' F:\chrome.vbs
' chrome.exe に適切なオプションをつけて起動するスクリプトです。
' バージョン番号(17.0.963.79の部分)は適切に書き換える必要があります。
' 文字列 "..." の中のダブルクオートはダブルクオート2つで表します。

Set shell = CreateObject("WScript.Shell")
shell.Run ".\Chrome\Application\chrome.exe --chrome-version=""17.0.963.79"" --user-data-dir=""../../User Data"""

リンク
chrome_switches.cc
List of Chromium Command Line Switches - 上記ソースコードなどから自動生成された準公式リスト
Run Chromium with switches (flags) - The Chromium Projects