📖

Windowsサンドボックスの環境セットアップ

2023/02/08に公開1

Windowsサンドボックスは手軽にクリーンなWindows環境を作成して、アプリケーションのテストが行える機能です.別途ライセンスを購入する必要はなく、既存のライセンスで使用できます.Windows 10 や Windows 11 から使用できます.しかし、Homeエディションでは正式にサポートされていません.今回は、Windowsサンドボックスを使う機会があったので、ここにまとめておきます.環境は次の通りです.

Windows 11 Pro 22H2

また、本文の中で <user> と表記しているものは、お使いのPCのユーザー名に置き換えてください.

📌 Windowsサンドボックスを有効にする

詳しい手順は下記を参考にしてください.

https://learn.microsoft.com/ja-jp/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview

📌 基本的な環境

構築する環境は WinGet, PowerShell, WindowsTerminal の3つ(最新版)をインストールした状態にすることです.この3つがあれば、その後の環境構築が快適です.ただし、簡単には行きません.また、Windowsサンドボックスは言語が英語ですが、日本語に対応する方法も紹介します.では、手順を追って説明します.

📌 Microsoft Store

WinGet があれば PowerShellWindowsTerminal もインストールできるはずです.しかし、WindowsサンドボックスにはMicrosoft Storeがありません.Microsoft Store経由でなく、直接 WinGet をインストールする必要があります.また、WinGetを使ってPowerShell はインストールできますが、WindowsTerminal はインストールに失敗します.なので、別の方法でインストールする必要があります.

Windowsサンドボックスは毎回クリーンな環境となるので、その度にダウンロードするのは時間のムダです.ですから、3つともあらかじめダウンロードしておいて、インストールします.

それぞれのバージョンは次の通りです.

Windows Package Manager 1.4.10173
PowerShell 7.3.2
Windows Terminal 1.16.10262.0

📌 バイナリのダウンロード

🔹 WinGet

まず、WinGet は以下からダウンロードできます.

https://github.com/microsoft/winget-cli

Releases から Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle をダウンロードします.また、VC++ v14 Desktop Framework Package も必要ですので、こちらもダウンロードしておきます(Microsoft.VCLibs.x64.14.00.Desktop.appx). リンクは上記のページにあります.

🔹 PowerShell

PowerShellのバイナリは以下からダウンロードできます.

https://github.com/PowerShell/PowerShell

stable版を使います. PowerShell-7.3.2-win-x64.msiファイルをダウンロードします.

🔹 Windows Terminal

Windows Terminalのバイナリは以下からダウンロードできます.

https://github.com/microsoft/terminal

ReleasesからMicrosoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundleをダウンロードします.

また、他にも Microsoft.UI.Xaml.x64.2.7 バンドルが必要です.これもバージョンを合わせる必要があり、2.7.3を使用します.下記サイトにあるDownload packageリンクからダウンロードできます.

https://www.nuget.org/packages/Microsoft.UI.Xaml/2.7.3

ダウンロードしたmicrosoft.ui.xaml.2.7.3.nupkgはNuGetパッケージですが、必要なのは中に含まれている Microsoft.UI.Xaml.2.7.appx です.nupkgはzipなので、展開して ./Tools/AppX/x64/Release/Microsoft.UI.Xaml.2.7.appx を取り出します.取り出したら、x64アーキテクチャとわかるように Microsoft.UI.Xaml.x64.2.7.appx に名前を変えておきます.

🔹 Sandboxフォルダ

これまでダウンロードした以下のファイルを、 C:\Users\<user>\Sandboxフォルダに入れておきます.フォルダがなければ任意のフォルダ名を作成して入れてください.

  • Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
  • Microsoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundle
  • Microsoft.VCLibs.x64.14.00.Desktop.appx
  • Microsoft.UI.Xaml.x64.2.7.appx
  • PowerShell-7.3.2-win-x64.msi

📌 Windowsサンドボックス構成ファイル

Windowsサンドボックスのカスタマイズパラメータを記述する構成ファイルを用意します.拡張子は .wsb です.ファイルはXML形式です.

まず、Windowsサンドボックスでのユーザー名は WDAGUtilityAccount 固定です.ここでは、ダウンロードしたフォルダをマウントする設定を追加します.マウント先はホームフォルダ内の Mount とします.Sandbox.wsb ファイルを作成し、内容を次のようにします.

Sandbox.wsb
<Configuration>
    <MappedFolders>
        <MappedFolder>
            <SandboxFolder>C:\users\WDAGUtilityAccount\Mount</SandboxFolder>
            <HostFolder>C:\users\<user>\Sandbox</HostFolder>
            <ReadOnly>true</ReadOnly>
        </MappedFolder>
    </MappedFolders>
</Configuration>

このファイルはどこに置いても構いません.私はSandboxフォルダ内に入れています.このファイルを実行すれば、Windowsサンドボックスが起動します.起動しない場合、Windowsサンドボックスに関連付けておくと便利です.

📌 スクリプトファイル

Windowsサンドボックスを実行する前に、いくつかスクリプトファイルを作成しておきます.これらはSandboxフォルダに入れておきます.スクリプトファイルは PowerShell です.個別に作成していますが、1つのまとまったスクリプトファイルにすることもできます

🔹 ポリシー

まず、PowerShellスクリプトファイルを実行するためにポリシーを設定する必要があります.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

コピペでもいいのですが、それも面倒なので policy というテキストファイルを用意して上記の内容にします.

🔹 WinGetインストールスクリプト

WinGetのインストールスクリプト install-winget.ps1 を作成します.内容は次のようになっています.

install-winget.ps1
Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.VCLibs.x64.14.00.Desktop.appx
Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

Add-AppPackageはPowerShellのコマンドレットで、パッケージのインストールを行います.

🔹 PowerShellインストールスクリプト

PowerShell 7.3.2 のインストールスクリプト install-powershell.ps1 を作成します.内容は次のようになっています.

install-winget.ps1
Start-Process msiexec -ArgumentList "/i PowerShell-7.3.2-win-x64.msi /passive" -Wait

もし、WinGet経由でインストールする場合、次のようにします.

install-winget.ps1
winget install -e --id Microsoft.PowerShell --source winget

🔹 WindowsTerminalインストールスクリプト

WindowsTerminalのインストールスクリプト install-terminal.ps1 を作成します.内容は次のようになっています.

install-terminal.ps1
Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.UI.Xaml.x64.2.7.appx
Add-AppPackage -Path C:\users\WDAGUtilityAccount\Mount\Microsoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundle

🔹 環境構築スクリプト

WinGet, PowerShell, WindowsTerminalの環境を構築するスクリプト setup-en.ps1 を作成します.内容は次の通りです.

setup-en.ps1
./install-winget.ps1
./install-powershell.ps1
./install-terminal.ps1

これとは別に日本語版に対応した環境構築スクリプト setup-ja.ps1 も用意します.内容は次の通りです.

setup-ja.ps1
Set-WinUserLanguageList -Force ja-JP
Set-Culture -CultureInfo ja-JP
./install-winget.ps1
./install-powershell.ps1
./install-terminal.ps1

Set-WinUserLanguageListSet-Culture で日本語を指定しています.これは一番最初に設定しなければなりません.

🔹 Sandboxフォルダの中身

この時点で、Sandboxフォルダの中身は次のようになっています.

📁Sandbox/
  ├──📄install-powershell.ps1
  ├──📄install-terminal.ps1
  ├──📄install-winget.ps1
  ├──📄Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
  ├──📄Microsoft.UI.Xaml.x64.2.7.appx
  ├──📄Microsoft.VCLibs.x64.14.00.Desktop.appx
  ├──📄Microsoft.WindowsTerminal_Win11_1.16.10262.0_8wekyb3d8bbwe.msixbundle
  ├──📄policy
  ├──📄PowerShell-7.3.2-win-x64.msi
  ├──📄Sandbox.wsb
  ├──📄setup-en.ps1
  └──📄setup-ja.ps1

📌 Windowsサンドボックス

準備が整ったので、Windowsサンドボックスを使います.
Sandbox.wsbを使用してWindowsサンドボックスを起動します.

Windows Sandbox

次に PowerShell を起動します.

PowerShell

カレントディレクトリが C:\Users\WDAGUtilityAccount になっています.マウント先のフォルダは C:\Users\WDAGUtilityAccount\Mount ですので、そこに移動します.

PS > cd Mount

まず、ポリシーを適用します.

PS > gc policy | iex

gcGet-Contentコマンドレットのエイリアスで、policyファイルの中身を取り出します.それをパイプで iex に渡しています.iexInvoke-Expressionコマンドレットのエイリアスで、渡された文字列をコマンドとして実行します.これでPowerShellスクリプトファイルを実行できますので、setup-en.ps1 (日本語なら setup-ja.ps1)を実行して構築します.

PS > ./setup-en.ps1

または

PS > ./setup-ja.ps1

スクリプトが正常終了してセットアップが完了したら、PowerShell画面を閉じて、ターミナルを起動します.

Windows Terminal

これで完了です.WinGetを使って他のアプリケーションをインストールできます.

以上です.参考になれば幸いです.

Discussion

catsbeen greencatsbeen green

こんにちは。参考にさせていただきました。
Windows10の場合、「Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle」のインストールの前に「Microsoft.UI.Xaml.x64.2.7.appx」をインストールする必要がありました。