アプリ評価環境「Windows SandBox」のWindows 11での状況
ASCII.jp / 2023年7月16日 10時0分
Windows Sandbox(以下、Sandbox)は、Professionalエディション以上に付属する、アプリケーション評価用の軽量デスクトップ環境だ。
本連載でも昨年の記事で扱ったのだが(「Windows 11の大型アップデート「Ver.22H2」ではこんな改良点がある」)、このときはプレビュー版での評価だったため、言語切り替えなどが動作していなかった。あらためてWindows 11 Ver.22H2で使い方などをまとめる。
詳細に関しては、過去記事(「Windows 10の新機能であるアプリテスト用環境「Sandbox」の技術を見る」、「Windows 10のアプリテスト用環境「Windows Sandbox」の構成ファイル」)も合わせて参照してほしい。
Sandbox構成ファイル
Sandboxは、拡張子がwsbの構成ファイルを使うことで、動作設定を指定して起動できる。Windows 11 Ver.22H2からは、再起動と終了が区別されるため、たとえば言語設定などをして、日本語環境に切り替えることが可能になった。
このwsbファイルだが、ほぼXML形式で「<」と「>」でキーワードを囲んだタグで設定を指定する。現在有効なタグには、以下の表のようなものがある。
また、タグの解説は以下のリンク先にある。日本語のページは自動翻訳でわかりにくいところがあるので、英語のページを見た方が早いかもしれない。
●Windows サンドボックス構成(日本語) https://learn.microsoft.com/ja-jp/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file ●Windows Sandbox configuration(英語) https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file
このうち、Windows 11で新設されたのが「ProtectedClient」タグで、「AppContainer分離」機能を有効化するためのものだ。
AppContainer分離はUWPに使われていたセキュリティ技術で、コンテナを使って、レガシーアプリケーションからのファイルなどのリソースアクセスに制限を掛ける。ただし、通常のWindows 11での利用は現在プレビュー中で、現状Sandboxの中でだけ正式機能になっている。基本的には企業向けの機能で、アプリケーション自体を対応させる必要があるため、ここではこれ以上解説しない。
ユーザー言語の切り替え
日本語版のWindows 11でSandboxを立ち上げても、ユーザーインターフェース言語は英語のまま。これはデフォルトユーザー(WDAGUtilityAccount)の言語設定が英語(en-US)になっているからだ。
Windows 11 Ver.22H2のSandboxでは、再起動することができるため、言語を追加するなどして再起動してユーザーインターフェースの言語を切り替えることができる。
この操作はPowerShellから可能だ。一番簡単な方法としては、Sandbox内で標準で組み込まれているWindows PowerShellを起動して、以下のコマンドを実行すればよい。
Set-WinUserLanguageList -Force ja-JP
これで言語が日本語に切り替わるので、「shutdown.exe /r /t 0 /f」で再起動する。再起動後、スタートメニューや設定ページが日本語になっているはずだ。この方法では、日本語の言語パックのみがインストールされた状態に切り替わる。
「米国英語」の言語パックを残したまま、日本語にするには、言語リストを取り出し、その先頭に日本語設定を挿入して、言語リストを再設定する。具体的には、
$x=Get-WinUserLanguageList $x.Insert(0,"ja-JP")Set-WinUserLanguageList -Force ja-JP Set-WinUserLanguageList -Force -LanguageList $x
とする。
wingetを最初に入れると便利
前回解説したように(「WinGet ConfigurationとPowerShell DSC」)、wingetはアプリのインストールだけでなく、設定変更も可能になったので、これを最初に導入しておくといいだろう。あとは必要に応じて、Windows TerminalでもVS Codeでも多くのアプリケーションをwinget経由で入れることができる。
ただし、Sandboxからのネットワークダウンロードは、ホスト側より遅い。可能ならパッケージのみをダウンロードしておき、これをログオンコマンドで起動するスクリプト内でインストールするほうがいいだろう。
具体的なインストール方法だが、まず、「Microsoft.VCLibs.x64.14.00.Desktop」が必要になる。これは、以下のリンクからダウンロードできる。
●Microsoft.VCLibs.x64.14.00.Desktopダウンロード https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx
これをwingetの前にインストールする。具体的には「Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx」とする。
次にWingetプレビュー版を入れる。こちらもあらかじめ以下のリンクからダウンロードしておく。
●Windows Package Manager 1.6.1573-preview https://github.com/microsoft/winget-cli/releases/download/v1.6.1573-preview/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
同じく「Add-AppxPackage」でインストールする。
Wingetをスクリプトから利用する場合、初回起動時にライセンス確認などがなされる。これを抑制するには、以下のように「--accept-source-agreements」と「--accept-package-agreements」オプションを付ける。
winget install Microsoft.WindowsTerminal.Preview --accept-source-agreements --accept-package-agreements
また、Winget configurationを利用する場合、事前に設定が必要だが、この設定ファイルはユーザーフォルダの下にあるパッケージフォルダに直接書き込んでおけばよい。具体的には、
copy settings.json C:\Users\WDAGUtilityAccount\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState
として、sittings.jsonを書き込んでおく(先ほどの前回記事を参照してほしい)。
Sanboxのログオンコマンドのデバッグ
Sandboxの使い方は人それぞれだろうから、必要なアプリケーションや設定も異なるはずだ。wingetのインストールなどは、すべてログオンコマンドからだと時間はかかるものの、手動操作なしに環境設定したSandboxが起動できる。
ただし、ログオンコマンドはコンソールウィンドウを表示しないため、デバッグが面倒になる。その場合はログオンコマンドで、スタートアップフォルダにバッチファイルをコピーし、起動したWindowsにこれを実行させるといい。
こうすることで、コンソールが表示され、PowerShellなどのデバッグ機能が利用できるようになる。ちゃんと動作するようになったら、ログオンコマンドに直接スクリプトを指定するのだが、ログオンコマンドは、コンソールが表示されない関係で、実行がエラーになるコマンドもあるので注意したい。
たとえば、add-appxpackageコマンドは、プログレスバーを「$ProgressPreference="SilentlyContinue"」で停止させないとウィンドウが表示されていないコンソールでは実行できない。
cmd.exeのバッチファイルは、無設定で実行可能であり、スタートアップフォルダに入れるだけで自動的に起動できる。実行タイミングは、デスクトップが表示され、ユーザー環境が動き出したときになる。
具体的には、以下のリストようなwsbファイルを使う。
このwsbファイルでは、ホスト側のD:\tempを、Sandbox側のC:\tempにマウントさせている(以下、この設定で解説する)。以下のスクリプトで参照しているファイルはすべてホスト側ではD:\tempに置き、スクリプト内では、C:\temp以下としてアクセスする。
ログオンコマンドは、単にファイルを、Sandbox標準ユーザー(WDAGUtilityAccount)のスタートアップフォルダにコピーしている。起動後、スタートアップフォルダが処理され、バッチファイルが起動する。
バッチファイル(C:\temp\Logon2nd.bat)は、以下のようなものになっている。
powershell.exe -ExecutionPolicy Bypass -File C:\temp\logoncommand.ps1
PowerShell.exeが実行するコマンドは、以下のリストのようなものだ。
# Set-PSDebug -Trace 1 $x=Get-WinUserLanguageList if($x.LanguageTag -notcontains "ja"){ $x.Insert(0,"ja-JP") Set-WinUserLanguageList -Force -LanguageList $x # read-host "Enter to restart" # Windows Sandboxを再起動して言語設定を有効にする shutdown.exe /f /r /t 0 } $ProgressPreference="SilentlyContinue" # パスを環境に合わせて書き換えること add-appxpackage "C:\temp\Microsoft.VCLibs.x64.14.00.Desktop.appx" add-appxpackage "C:\temp\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" C:\temp\PowerShell-7.3.5-win-x64.msi /quiet winget install Microsoft.WindowsTerminal.Preview --accept-source-agreements --accept-package-agreements --silent --disable-interactivity copy "C:\temp\settings.json" "C:\Users\WDAGUtilityAccount\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState" winget configuration "C:\temp\DevMode.yaml" --accept-configuration-agreements wt.exe Set-PSDebug -off read-host "Enter"
最初の部分では、言語リストの先頭に日本語を置き、再起動している。注意するのは再起動後に再び、ログオンスクリプトが動作する点だ。このため、再起動を行うログオンスクリプトやそこから起動するプログラムは、2回実行されても問題ないように作る必要がある。それがリストの3行目にあるif文の役目である。
再起動後は、言語リストに「ja」が含まれるため、言語リストは書き換えず、再起動もしない。なお、2行目から9行目を削除あるいは注釈化することで、日本語への切替をしないようにできる。
winget configureでは、開発者モードをオンにしている。yamlファイルは以下のリストのようになる(前回解説したものの一部を利用)。
properties: resources: - resource: Microsoft.Windows.Developer/DeveloperMode directives: description: Enable Developer Mode allowPrerelease: true settings: Ensure: Present configurationVersion: 0.2.0
環境設定が自動でできると、Sandbox利用の敷居が下がる。初期設定スクリプトを完成させるのが少し面倒だが、1度完成すれば、あとは自動で処理されるため、初期化が終了するまで放置しておけばいい。Sandboxは仮想環境に比べるとリソース消費が小さく、終了させればきれいな状態に戻るので、アプリなどのテストに利用できる。また、日本語環境内で簡単に英語環境を起動できるため、アプリの国際化対応の評価などにも対応できる。
この記事に関連するニュース
-
Windows 11 2024 Updateの目玉機能「リコール」って何? 実際に試して分かったポイントを解説
ITmedia PC USER / 2024年11月26日 12時5分
-
Windows 11 2024 Updateの開発者向けInsider Previewで「リコール」機能のテスト Snapdragon X搭載Copilot+PCが対象
ITmedia PC USER / 2024年11月25日 14時40分
-
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた
ASCII.jp / 2024年11月24日 10時0分
-
「Windows 11 on Arm」のディスクイメージが登場 Armベースの仮想マシンへのインストールが簡単に
ITmedia PC USER / 2024年11月14日 18時30分
-
Windows Subsystem for Linuxガイド 第41回 WSL GUI設定
マイナビニュース / 2024年11月7日 15時31分
ランキング
-
1LINEアルバム、他人の写真が誤表示される不具合で続報 「30日午前には解消予定」 Android版はアップデートを
ITmedia NEWS / 2024年11月29日 18時51分
-
2イオンカード、不正利用に関するNHK報道を受け声明 「1日も速く調査結果を報告できるようにする」
ITmedia NEWS / 2024年11月29日 16時52分
-
3NHKのネット受信契約(案)が“ダークパターン”過ぎて見過ごせない件(前編) NHKの見解は?
ITmedia NEWS / 2024年11月28日 19時9分
-
4“年利実質18%”で話題、ヤマダ積立のページが閲覧できない状態に 今後の方針、同社に聞いた
ITmedia NEWS / 2024年11月29日 19時35分
-
5“セクシー女優”が「明日花キララから詐欺にあった」と主張→“虚偽”認め謝罪 「多大なご迷惑」「誠に申し訳ございません」
ねとらぼ / 2024年11月29日 19時46分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください