Google Chromeを仮想アプリ化する方法(2019-12-06)
vExpert の Advent Calendar 2019の6日目を担当させていただきます。
https://adventar.org/calendars/4289アプリ仮想化奉行です。
よろしくおねがいします。
最近更新が滞っていて、すいません。
Google ChromeをThinAppを使って仮想アプリ化するためのTipsについて
書きます。
なかなか手間がかかります。
。
※お願い:簡単な動作確認は行っていますが、全ての環境で動作することを保証するものではありません。動かない、一部の機能がおかしい、などなどくれぐれも自己責任でお願いいたします。GithubにGoogle Chromeのパッケージ一式を公開してありますので
こちらをダウンロードして、Build.batで作成したほうが早いと思います。
https://github.com/tunemicky/VirtGoogleChrome必要なもの: ・仮想アプリの作成環境:Windows 10やWindows7
・VMware ThinApp SetupCapture ver5.2.6 (このバージョン以上でないとNG)
・Google Chrome のインストーラー
・Chrome.exeのアプリケーションマニフェストを編集するためのリソース書換ツール
ResourceHackerなど
http://www.angusj.com/resourcehacker/手順: 仮想アプリの作成環境(キャプチャー環境)でGoogle Chromeのキャプチャーを行います。
前半の手順は、省略します。(一般的な手順です。)
ここから、カスタママイズしていきます。
キャプチャーが完了した後のプロジェクトフォルダーから
%Local AppData%
%ProgramFilesDir%を残して、それ以外のフォルダーを削除します。
%Local AppData%フォルダーから"Google"フォルダー以外を削除します。
%Local AppDAta%\Google\Chrome\フォルダーの配下に
"Application"フォルダーを作成します。
##Attributes.iniファイルをIsolationMode=Fullで作成します。
%Local AppDAta%\Google\Chrome\User Data
フォルダーの中身を##Attributes.iniファイルを残して、その他を全て削除します。
%ProgramFilesDir%\Google フォルダーを残して、その他のフォルダーを削除します。
%ProgramFilesDir%\Google\Chrome\Application\78.0.3904.108
にある、"78.0.3904.108.manifest"ファイルを削除します。
※Google Chromeのバージョンなので適宜 読み替えてください。
%ProgramFilesDir%\Google\Chrome\Application\78.0.3904.108\Installer
フォルダーにあるセットアップ関連のファイルを削除します。
※容量削減
%ProgramFilesDir%\Google\Chrome\Application\78.0.3904.108にあるファイル、フォルダーを全てコピーします。※一つ上の階層に貼り付けます。 %ProgramFilesDir%\Google\Chrome\Application\に貼り付けます。その後、78.0.3904.108フォルダーを削除します。chorome.exeのマニフェストを書き換えます。※これが最大のポイントです。リソースハッカーで %ProgramFilesDir%\Google\Chrome\Application\chrome.exeを開きます。左ペインから、Manifest1:1033を選択します。マニフェストの内容を以下のものに入れ替えます。<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges><requestedExecutionLevel level="asInvoker" uiAccess="false">
</requestedExecutionLevel>
</requestedPrivileges></security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></supportedOS>
</application></compatibility></assembly>
リソースハッカーのツールバーの「右三角の緑」ボタンを押します。
その後、上書き保存を行います。
HKEY_CURRENT_USER.txtの編集を行います。既存のものを全て削除してから、
isolation_full HKEY_CURRENT_USER\SOFTWARE\Google\Update
Value=UpdateDefault
REG_DWORD=#00#00#00#00
を上書き保存します。
HKEY_LOCAL_MACHINE.txtの編集を行います。既存のものを全て削除してから、
isolation_full HKEY_LOCAL_MACHINE\SOFTWARE\Google\Update
Value=UpdateDefault
REG_DWORD=#00#00#00#00
isolation_full HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update
Value=UpdateDefault
REG_DWORD=#00#00#00#00
を上書き保存します。
Package.iniの編集を行います。[BuildOptions]
VirtualizeExternalOutOfProcessCOM=0
IgnoreDDEMessages=1
CopyManifestData=1
SetVirtualModuleFileNameInPeb=1
を追加します。
コマンドラインオプションを指定します。
ここもポイントです。
[Google Chrome.exe]
Source=%ProgramFilesDir%\Google\Chrome\Application\chrome.exe
Shortcut=GoogleChrome78.dat
WorkingDirectory=%ProgramFilesDir%\Google\Chrome\Application
Comment=インターネットにアクセス
Protocols=ftp;http;https
Shortcuts=%Desktop%;%Programs%;%AppData%\Microsoft\Internet Explorer\Quick Launch;%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
CommandLine="%ProgramFilesDir%\Google\Chrome\Application\chrome.exe" --no-sandbox --disalbe-gpu --test-type --user-data-dir=%temp%\Chrome78
※コマンドラインオプションの説明
--no-sandbox Chromeのサンドボックスの無効化←必須
--disable-gpu GPUの無効化←これは任意です。GPU有効でも動きます。
--test-type 必須
--user-data-dir ユーザーデータの保存先を%temp%\Chrome78に永続化します。
これをThinAppSandboxに格納すると、ハングする頻度が上がります。
Build.batを実行します。完成!!!!
お疲れさまでした、完成です。
今回のプロジェクトフォルダーのリストです。
C:.
│ build.bat
│ HKEY_CURRENT_USER.txt
│ HKEY_LOCAL_MACHINE.txt
│ HKEY_USERS.txt
│ Package.ini
│ tree.txt
│
├─%Local AppData%
│ │ ##Attributes.ini
│ │
│ └─Google
│ │ ##Attributes.ini
│ │
│ └─Chrome
│ │ ##Attributes.ini
│ │
│ ├─Application
│ │ ##Attributes.ini
│ │
│ └─User Data
│ ##Attributes.ini
│
├─%ProgramFilesDir%
│ │ ##Attributes.ini
│ │
│ └─Google
│ │ ##Attributes.ini
│ │
│ └─Chrome
│ │ ##Attributes.ini
│ │
│ └─Application
│ │ ##Attributes.ini
│ │ chrome.dll
│ │ chrome.dll.sig
│ │ chrome.exe
│ │ chrome.exe.sig
│ │ chrome.VisualElementsManifest.xml
│ │ chrome_100_percent.pak
│ │ chrome_200_percent.pak
│ │ chrome_child.dll
│ │ chrome_child.dll.sig
│ │ chrome_elf.dll
│ │ chrome_proxy.exe
│ │ chrome_watcher.dll
│ │ d3dcompiler_47.dll
│ │ elevation_service.exe
│ │ eventlog_provider.dll
│ │ icudtl.dat
│ │ libegl.dll
│ │ libglesv2.dll
│ │ master_preferences
│ │ nacl64.exe
│ │ nacl_irt_x86_32.nexe
│ │ nacl_irt_x86_64.nexe
│ │ natives_blob.bin
│ │ notification_helper.exe
│ │ resources.pak
│ │ v8_context_snapshot.bin
│ │
│ ├─default_apps
│ │ ##Attributes.ini
│ │ docs.crx
│ │ drive.crx
│ │ external_extensions.json
│ │ gmail.crx
│ │ youtube.crx
│ │
│ ├─Extensions
│ │ ##Attributes.ini
│ │ external_extensions.json
│ │
│ ├─Installer
│ │ ##Attributes.ini
│ │
│ ├─Locales
│ │ ##Attributes.ini
│ │ am.pak
│ │ ar.pak
│ │ bg.pak
│ │ bn.pak
│ │ ca.pak
│ │ cs.pak
│ │ da.pak
│ │ de.pak
│ │ el.pak
│ │ en-GB.pak
│ │ en-US.pak
│ │ es-419.pak
│ │ es.pak
│ │ et.pak
│ │ fa.pak
│ │ fi.pak
│ │ fil.pak
│ │ fr.pak
│ │ gu.pak
│ │ he.pak
│ │ hi.pak
│ │ hr.pak
│ │ hu.pak
│ │ id.pak
│ │ it.pak
│ │ ja.pak
│ │ kn.pak
│ │ ko.pak
│ │ lt.pak
│ │ lv.pak
│ │ ml.pak
│ │ mr.pak
│ │ ms.pak
│ │ nb.pak
│ │ nl.pak
│ │ pl.pak
│ │ pt-BR.pak
│ │ pt-PT.pak
│ │ ro.pak
│ │ ru.pak
│ │ sk.pak
│ │ sl.pak
│ │ sr.pak
│ │ sv.pak
│ │ sw.pak
│ │ ta.pak
│ │ te.pak
│ │ th.pak
│ │ tr.pak
│ │ uk.pak
│ │ vi.pak
│ │ zh-CN.pak
│ │ zh-TW.pak
│ │
│ ├─MEIPreload
│ │ ##Attributes.ini
│ │ manifest.json
│ │ preloaded_data.pb
│ │
│ ├─SetupMetrics
│ │ ##Attributes.ini
│ │ 20191205171904.pma
│ │
│ ├─swiftshader
│ │ ##Attributes.ini
│ │ libegl.dll
│ │ libglesv2.dll
│ │
│ ├─VisualElements
│ │ ##Attributes.ini
│ │ logo.png
│ │ logobeta.png
│ │ logocanary.png
│ │ logodev.png
│ │ smalllogo.png
│ │ smalllogobeta.png
│ │ smalllogocanary.png
│ │ smalllogodev.png
│ │
│ └─WidevineCdm
│ │ ##Attributes.ini
│ │ license
│ │ manifest.json
│ │
│ └─_platform_specific
│ │ ##Attributes.ini
│ │
│ └─win_x86
│ ##Attributes.ini
│ widevinecdm.dll
│ widevinecdm.dll.sig
│
└─bin
Google Chrome.exe
GoogleChrome78.dat
GoogleChrome78.dat.alt