ネットで見かける Windows Sandbox を Home Edition で使う方法
Windows Sandbox を使いたいことがよくあるのですが その時使ってる PC が Pro じゃないこともあります
公式ドキュメントでは Home エディションはサポートしてないと書かれています
ただ ググると Home エディションでも有効化するという bat ファイルが色々出てきます
サイトはいくつも出てきますが bat ファイルの中身は同じみたいです

怪しげなファイルをインストールするものだったり 海賊版的な方法だったりするのかと不安もあるので中身を見てみました
長い割にほとんどが管理者権限で動かすための部分だったりで実質は以下の部分だけでした

dir /b %SystemRoot%\servicing\Packages\*Containers*.mum >sandbox.txt
for /f %%i in ('findstr /i . sandbox.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
Dism /online /enable-feature /featurename:Containers-DisposableClientVM /LimitAccess /ALL

パッケージの追加もパッケージ名はローカルにあるものから作ってますし外部からの取得はしてなさそうです
これだけで動くなら正規の方法のようです
ただ問題起きたら影響が大きそうなので事前に壊れてもいい PC で試したいので実行はまた今度にします



ちなみに 1, 2 行目でやってることは

C:\Windows\servicing\Packages\ 内の Containers を含む .mum ファイルすべてに対して

dism /online /norestart /add-package:***

を実行しています
*** のところに .mum ファイルのフルパスが入ります

一旦ファイルに出力してますが 特別な意味はなさそうです
findstr を使ってますが findstr は正規表現で検索するコマンドで 検索条件が「.」なので全件に一致します
空行は無視して 1 件ごと取得するために使ってそうです
作ったファイルもすぐに消しています

やってることは PowerShell のこれと同じはず

$items = dir C:\Windows\servicing\Packages\*Containers*.mum
foreach ($i in $items) {
dism /online /norestart /add-package:$i.FullName
}
dism /online /enable-feature /featurename:Containers-DisposableClientVM /LimitAccess /ALL

最終的に有効化するのが Containers-DisposableClientVM なら add-package するのは Containers を含む全てではなく Containers-DisposableClientVM を含むものだけでも良さそうに見えますが 他も必要になるのでしょうか

> dir C:\Windows\servicing\Packages\*Containers-DisposableClientVM*.mum | select name

Name
----
Containers-DisposableClientVM-merged-Package~31bf3856ad364e35~amd64~en-US~10.0.19041.1.mum
Containers-DisposableClientVM-merged-Package~31bf3856ad364e35~amd64~ja-JP~10.0.19041.1.mum
Containers-DisposableClientVM-merged-Package~31bf3856ad364e35~amd64~~10.0.19041.3636.mum
Containers-DisposableClientVM-Package~31bf3856ad364e35~amd64~en-US~10.0.19041.3636.mum
Containers-DisposableClientVM-Package~31bf3856ad364e35~amd64~ja-JP~10.0.19041.3636.mum
Containers-DisposableClientVM-Package~31bf3856ad364e35~amd64~~10.0.19041.3693.mum
Containers-DisposableClientVM-Package~31bf3856ad364e35~amd64~~10.0.19041.3803.mum
Windows Sandbox で Windows Terminal を使う
未だに標準だと入ってないみたい
入れようにもサンドボックスの中ではストアが使えないのでストアを見れないしブラウザからインストールボタンを押してもストアが無いので何も起きない

仕方ないので Github の releases ページからインストーラーをダウンロードする
https://github.com/microsoft/terminal/releases

Windows10 と Windows11 版のそれぞれに msix ファイルと zip ファイルがある
zip の方は Windows10_PreinstallKit.zip というものでこれを先にインストールしないと msix のインストールに失敗する

ストアが無いせいか msix や appx ファイルはエクスプローラーから開けないので PowerShell でインストールする
zip の中は arm/arm64/x86/x64 とアーキテクチャごとの Microsoft.VCLibs の appx があって自動でやってくれなそうなので環境にあったのを選んでインストール
完了したら Windows Terminal 本体の msixbundle をインストール

Add-AppxPackage (zip の中の appx)
Add-AppxPackage (Windows Terminal の msixbundle)

新しい方の PowerShell は Add-AppxPackage コマンドレット自体はあるけどサポートしてないエラーが出るので古い方でやる
Windows Sandbox 内の Edge がクラッシュする
Sandbox を起動して何かをダウンロードするために Edge を起動します
この時点では普通に使えます

Edge バージョンを確認しようかとバージョン情報が見える画面を開きます
edge://settings/help

Edge を閉じて再起動します
すべてのタブがクラッシュしていて新しいタブも開けません
URL を直接指定しても全タブが使い物にならないです

バージョン確認画面でアップデートが実行されてそこでエラーが出ているのでこれが原因ぽいです
どうしようもなさそうなので こうなってしまうと Sandbox を再起動して初期状態から使うしかなさそうです
この画面を開いてしまうたびに Sandbox の再起動が必要になるのは結構面倒なのでどうにかしてほしいものです
そのときは Chrome の最新版を試すために Chrome をインストールしていて助かりましたが ブラウザを入れていないとインターネットを見ることもできなくなります
まぁホスト側でインストーラーや必要なものをダウンロードしてコピーすることはできるのですけど……

自分の環境だけ?と思って試してみると Sandbox を作り直しても再現性があり 別の PC でも再現しました

必要ないならヘルプ画面を開かないように注意するしかないですね
バージョンが知りたいなら JavaScript から UA を表示するとかで回避でしょうか
ところで 未だにブラウザバージョン取得するのに 方法が UA 文字列のパースしかないのはどうかと思うのですけど どこかに専用プロパティができてたりしないのでしょうか
Windows Sandbox が起動できない
久々に起動しようとしたら

Windows サンドボックスを開始できませんでした。

Error 0xc0370400 vSMB 保存状態のデータから読み取られたファイルが見つからなかったため、この仮想マシンを復元できません。
保存状態のデータを削除してから、仮想マシンを起動してください。

というエラーで起動できない
ググるとこんなページがあって サンドボックス機能を無効にしてから再起動してまた有効にすればいいみたいだけどかなり面倒

https://answers.microsoft.com/en-us/windows/forum/all/windows-sandbox/dc54884d-ba8d-4be1-8245-cf255af1ea9f