2026年2月13日

Windows 11のWindowsサンドボックスでフォントリンクを有効にする

Windows上でプログラムを作っていて、検証、特にインストーラ関係の検証をしようとすると、開発用のPC以外の環境が欲しくなることがあります。検証用のPCを別途用意する、というのが一番簡単ですが、お金もかかりますし、そのPCを適切にメンテナンスする必要もあり、あまりお手軽ではありません。
またVMware WorkstationVirtualBoxHyper-Vなどの仮想マシン環境を使う、という方法もありますが、これらはゲストOSに別途ライセンスを用意するか、評価版を使用する必要があります。MSDNに入っていれば検証用のライセンスが含まれていますが、そうでなければリテール版のライセンスを購入するか、評価版(サーバOSは180日、クライアントOSは90日有効)ということになります。ところが現時点(2026年2月)で評価版のVM(VHD)がダウンロードできるのはWindows Server 2025(英語版)のみで、クライアントOSはISOのみとなっています。このため評価期間が過ぎるとISOからインストールし直すことになり、これもあまりお手軽とは言えません。
そこでもう一つの選択肢として考えられるのがWindowsのPro/Ent/Edu SKUで使用できるWindowsサンドボックスです。これはホストのWindowsのOSファイルを使用するため軽量で、OSのインストールも不要です。その代わり再起動、シャットダウンで全ての変更が破棄されるため、インストール後に再起動が必要なケースには使用できません。Windows 11 22H2以降でWindowsサンドボックスは再起動にも対応するようになりました(シャットダウンで全ての変更が破棄されることに変わりはありません)。とはいえPro版であれば追加のライセンスも不要で、必要なときにすぐ起動して使える、というのはなかなか便利です。

と、ここまでは前置きで、Windows 10では特に問題ないのですが、Windows 11では起動したWindowsサンドボックスのゲストOSのレジストリ上にフォントリンクが"SimSun-ExtG"(宋体拡張G)に対してしか登録されておらず、日本語をTahomaやSegoe UIで表示するGDIアプリケーション(DelphiのVCLアプリケーションなど)では正しく表示されなくなってしまっています。上に書いたようにWindowsサンドボックスではシステムファイルはホストOSのものをそのまま使用するため、フォントファイルもホストOSにあるものは全てゲストOSにも存在しています。つまりフォントリンクに関するレジストリをゲストOSに登録すればよい、ということになります。そこでカスタムWindowsサンドボックスでこれを解決してみます。

まずホストOSのフォントリンクのレジストリ設定をエクスポートします。レジストリエディタで HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink を開き、右クリック→エクスポートでファイルに保存します(ここでは"SystemFontLink.reg"とします)。

次に.wsbファイルを作成します。ここでは現在のユーザのドキュメントの下にWindowsSandboxというフォルダを作成し、その下にエクスポートしたファイルと、エディタで以下のようなXML形式のファイルを作成して置きます。.wsbファイルの文字コードはUTF-8(BOM付)かASCIIにしてください。
<Configuration>
  <VGpu>Enable</VGpu>
  <Networking>Enable</Networking>
  <AudioInput>Disable</AudioInput>
  <VideoInput>Disable</VideoInput>
  <ProtectedClient>Enable</ProtectedClient>
  <PrinterRedirection>Disable</PrinterRedirection>
  <ClipboardRedirection>Enable</ClipboardRedirection>
  <MemoryInMB>4096</MemoryInMB>

  <MappedFolders>
    <MappedFolder>
      <HostFolder>%USERPROFILE%\Documents\WindowsSandbox</HostFolder>
      <SandboxFolder>C:\Users\WDAGUtilityAccount\Documents\WindowsSandbox</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>

  <LogonCommand>
    <Command>reg import C:\Users\WDAGUtilityAccount\Documents\WindowsSandbox\SystemFontLink.reg</Command>
  </LogonCommand>
</Configuration>
作成した.wsbファイルをダブルクリックすることで、ホストOSと同じフォントリンクが設定されたWindowsサンドボックスが起動します。

ポイントは2つあります。1つ目は<MappedFolders>でホストOS上のフォルダをゲストOSにマッピングすることで、ホストOS上のファイルを参照できるようにしています(ここではホストOSの現在のユーザのドキュメントフォルダの下のWindowsSandboxフォルダを、Windowsサンドボックス上の既定のユーザ("WDAGUtilityAccount")のドキュメントフォルダの下のWindowsSandboxフォルダにマッピングしていますが、ホストOS、ゲストOSとも、どこに配置しても構いません)。
2つめは<LogonCommand>でゲストOSのログオン後にレジストリをインポートすることでフォントリンクの情報を登録しています。

これ以外の設定(特にメモリの割り当て)についてはWindows サンドボックスを使用して構成する | Microsoft Learnで確認してください。

注: Windows 11 22H2以降でWindowsサンドボックスが再起動にも対応していることがわかったため、一部の記述を修正しました。

0 件のコメント: