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%
%ProgramFilesDir%を残します。
%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フォルダーを削除します。
chrome.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
を上書き保存します。
※Chromeの自動アップデートを無効化するオプション
※Chromeの自動アップデートを無効化するオプション
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
を上書き保存します。
※Chromeの自動アップデートを無効化するオプション
Package.iniの編集を行います。
[BuildOptions]
VirtualizeExternalOutOfProcessCOM=0
ChildProcessEnvironmentDefault=External
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
├─%Local AppData%
│ │ ##Attributes.ini
│ │
│ │ ##Attributes.ini
│ │
│ └─Chrome
│ │ ##Attributes.ini
│ │
│ ├─Application
│ │ ##Attributes.ini
│ │
│ └─User Data
│ ##Attributes.ini
├─%ProgramFilesDir%
│ │ ##Attributes.ini
│ │
│ │ ##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