
動作確認
こんにちわ。 SB C&S の後藤です。
前回までで実装に必要な流れは解説してきました。
今回は仮想化したアプリの動作確認について解説します。仮想化したアプリケーションを動作させることは一筋縄ではいかないことが多くあります。Windows のアップデートなど、動作環境の変化によって動作が不安定になる可能性もあります。問題の解決に至るためのテストパターンを理解して確認を進めることが、課題解決に向けた最適解になります。
テストのベストプラクティス
動作テストは次の4つの環境でテストを順に行うことが推奨されています。
- ダーティテスト (Dirty test)
- ウォッシュドテスト (Washed test)
- クリーンテスト (Clean test)
- プロダクションテスト (Production test)
この順番でテストをすることで、本番環境で確実に動作するアプリであることを確認できます。また、動作に問題があったときに原因を特定しやすくなります。
この内容はOmnissaのフォーラム内で紹介されています。
https://community.omnissa.com/forums/topic/70399-recommended-testing-methods-for-thinapp-captures/
それでは、それぞれのテストについて順に解説していきます。
ダーティテスト (Dirty test)
Setup Captureを実行した環境をそのまま使用して行うテストです。つまり、対象のアプリがすべてインストールされている環境でのテストです。
アプリの動作に必要なファイルなどがすべて揃っている環境のため、動作する可能性が高い環境です。
この環境で問題が出た場合は他の環境でもほぼ動作しません。その上、ThinAppでは仮想化できないアプリである可能性も高くなります。
ウォッシュドテスト (Washed test)
ダーティテストの環境から、キャプチャ中にインストールしたアプリなどをアンインストールして行うテストです。
複数のアプリが含まれている場合は一つずつアンインストールして、その都度動作を確認します。
動作確認の前には必ずサンドボックスを削除してください。サンドボックス内のファイルが動作状況に影響を与える場合があります。
このテストでは仮想アプリ内に必要なファイルやレジストリのデータが含まれているかを確認できます。ここで動作しない場合はキャプチャに抜けがある可能性があります。
クリーンテスト (Clean test)
スナップショットを使って、キャプチャ環境をクリーンなWindowsに戻して行うテストです。
プロジェクトフォルダーは事前に別の場所にコピーしておいてください。
まだ一度も他のアプリをインストールしたことがないクリーンなWindows環境でテストすることで、さらにパッケージに不足がないかを確認できます。
この環境で動作することで、他のWindows環境でも動作し得る仮想アプリであることが確認できます。
プロダクションテスト (Production test)
実際に仮想アプリを稼働させる本番環境でテストします。
この段階で動作に問題が出た場合は環境による要因の可能性が高くなります。
例えば、ウイルス対策アプリによって動作が妨げられている場合や、特定のWindows Updateが影響している場合などです。
これまでのテスト環境との違いを洗い出し、対策を検討する必要があります。
テストの内容
これらの動作確認では、使用するすべての機能をテストします。起動はしても特定の機能が動作しない場合もあります。
印刷機能があるアプリは、プリンターが接続されていなくてもPDF出力機能を使用してテストしてください。
特定のユーザーやユーザーグループが必要な場合は、適宜作成してテストを行ってください。
事前準備も含めて操作手順書を作っておくと良いでしょう。
サンドボックスの取り扱い
テストではサンドボックスを削除する必要が度々出てきます。そのため、サンドボックスをわかりやすい場所にしておくことをお勧めします。

ビルドしたアプリのEXEと同じフォルダーに、Package.iniのSandboxNameのフォルダーを作成すると、そこがサンドボックスとして扱われます。
例えば SandboxName=Notepad++ なら「Notepad++」というフォルダーを作成します。
この場所はPackage.iniのSandboxPath指定よりも優先されます。
代わりに「Thinstall」フォルダーを作成する方法も有効です。ただし、SandboxNameのフォルダーがある場合はそちらが優先されます。
サンドボックスの詳細は以下を参照してください:
https://docs.omnissa.com/ja-JP/bundle/ThinAppUserGuideV2503/page/SearchOrderfortheSandbox.html#thinapp
アプリ終了時、または起動時にサンドボックスを自動削除する設定もあります。
Package.iniで RemoveSandboxOnExit または RemoveSandboxOnStart を有効にしてください。
[BuildOptions]
RemoveSandboxOnExit=1
build.batを実行して再ビルドすると設定が適用されます。なお、「終了時」とは最後の子プロセスが終了するタイミングです。
プロセスの確認
仮想アプリによるプロセスを特定したい場合や、残ったプロセスを強制終了したい場合、プロセスIDを確認する方法があります。
仮想アプリのプロセス一覧は、仮想レジストリエディターを使って確認できます。
Package.iniを開き、レジストリエディターをエントリーポイントとして有効化します。Disabled=1 をコメントアウトしてください。
[regedit.exe]
Source=%SystemRoot%\regedit.exe
Shortcut=Notepad++.exe
;Disabled=1
再ビルドすると、regedit.exeがbinフォルダーに作成されます。
仮想regedit.exeを開き、以下のキーを表示します:
HKEY_LOCAL_MACHINE\SOFTWARE\Thinstall\ProcessList

[HKEY_LOCAL_MACHINE\Software\Thinstall\ProcessList]
"14004"="C:\\Program Files\\Notepad++\\notepad++.exe"
"5692"="C:\\WINDOWS\\regedit.exe"
"2524"="C:\\Program Files (x86)\\ThinstallPlugins\\TASurrogate64.exe"
ここに表示されるキー名が仮想アプリのプロセスIDです。画像ではNotepad++がプロセスID 14004で動作しているとわかります。
Windowsのタスクマネージャーを開き、該当プロセスIDを検索して確認します。

この方法は、子プロセスが残っていてアプリを再ビルドできない場合などにも役立ちます。
Windows セキュリティ対応
Windows Defenderによって仮想アプリのEXEファイルが削除される場合があります。
この場合はWindowsセキュリティの「保護の履歴」からファイルを復元してください。

リアルタイム保護を一時停止することもできますが、自動的に稼働状態に戻るため、こまめに状態を確認する必要があります。
本番環境を除き、サードパーティ製のセキュリティ対策アプリはインストールせずにテストしてください。
今回は動作確認の方法をお伝えしました。うまく動かなかった場合の対処については改めて解説します。
執筆協力
Nagisaworks 伊藤さま
ThinApp技術指南
著者紹介
SB C&S株式会社
ICT事業本部 技術本部
ソリューション技術統括部 技術推進室
後藤 正幸
