MSIX app attach の構築手順について

Last Update: feedback 共有

本記事はマイクロソフト社員によって公開されております。

こんにちは。Windows プラットフォーム サポートの玉井です。
今回は、2021 年 4 月 13 日 に GA された、MSIX app attach と、その構築手順について、ご案内いたします。

MSIX app attach GA の 発表記事 : MSIX app attach is now generally available

目次

MSIX app attach の概要について

MSIX app attach の概要を説明する前に、MSIX についてまずは説明します。

MSIX は、新しい Windows アプリ パッケージ形式です。
MSIX パッケージ形式では、Win32、WPF、Windows フォームのアプリに対して新たな、最新のパッケージ化および展開機能が有効になるだけでなく、既存のアプリ パッケージやインストール ファイルの機能が維持されます。

MSIX パッケージ自体の詳細な情報につきましては、以下の公開情報をご参照ください。
MSIX ドキュメント

MSIX app attach は、この MSIX パッケージを、ユーザーログオン時にアプリケーションとして OS に アタッチする(取り付ける)ことで、AVD 環境で OS と アプリケーションを分離するために利用できる機能となっています。

一般的に AVD などの、DaaS/VDI のソリューションでは、イメージ管理に工数がかかるという課題があります。
マスターイメージにアプリケーションをインストールし、アップデートごとにマスターイメージを変更し、バージョン管理をされる管理者の方が多いのではないでしょうか。
MSIX app attach を利用することで、アプリケーションの管理を、イメージ管理から分離し、マスターイメージの変更作業にかかる工数を減らすことができます。

以下が、MSIX app attach の主な利点となります。

  • MSIX コンテナーを使用して、ユーザー データ、OS、アプリを分離する。
  • アプリケーションを動的に配信するときに再パッケージ化する必要がなくなる。
  • ユーザーがサインインするまでにかかる時間を短縮する。
  • インフラストラクチャの要件とコストを削減する。

その他詳細につきましては、以下の MSIX app attach の公開情報をご確認ください。
MSIX アプリのアタッチとは

MSIX アプリのアタッチの用語集

MSIX アプリ アタッチに関するごよくある質問

イメージ管理について

上記で、MSIX app attach を利用することで、イメージ管理のコストを下げることができる旨を記載いたしましたが、日本語環境や、お客様の要件に併せたカスタムイメージを作成される際に、イメージ作成がなくなるわけではないことは予めご留意ください。

MSIX app attach を利用することで、アプリケーションとイメージ管理を分離することはできますが、それ以外のローカライゼーション(日本語化)や、sysprep 前にマスターイメージに設定されたい内容につきましては、これまでと同様カスタムイメージ作成時にご実施いただく必要がございます。

日本語化イメージ作成手順につきましては、以下の弊社サポートブログをご参考ください。

AVD ARM 日本語化イメージ作成手順について

また、AVD での カスタムイメージ作成時の手順や、設定項目につきましては、以下の公開情報をご参照ください。

マスター VHD イメージを準備してカスタマイズする

MSIX app attach の動作プロセスについて

MSIX app attach は、下図の 1 から 6 の順番に動作します。

  1. AVD 管理者が、Azure Portal から MSIX パッケージを設定し、割り当てを行います。
  2. まず、ユーザーが AVD クライアントで認証を行い、AVD フィードを取得します。
  3. AVD の サービス として、AVD コントロールプレーン 内の ブローカー が、ユーザー の セッション を ホストプール内のセッションホストに割り当てます。
  4. FSLogix で、ユーザープロファイル の コンテナ を セッションホスト の マシン に ロード(マウント)します。
  5. ユーザーに割り振られたアプリケーションを読み込みます。
  6. 割り振られた アプリケーション を、セッションホストに登録します。

また、MSIX app attach だけに着目すると、以下のようなプロセスがあります。

  1. MSIX パッケージ を MSIX app attach のパッケージに拡張します。
  2. VM 上で、MSIX app attach のパッケージを利用できるようにします。(ステージング)
  3. ステージングされたアプリケーションを、ユーザーに利用できるようにします。(登録)
  4. ユーザーセッションが確立されるまで、アプリケーションのロードを遅延させます。(遅延登録)
  5. ユーザーが必要となったときに、アプリケーションがロードされるようにできます。(オンデマンド)

必要要件

MSIX app attach 利用時に必要な要件は以下となります。

  • AVD 環境
  • Windows 10 single or multi-session かつ、build 2004 以降のバージョン
  • ネットワーク共有(例: Azure Files もしくは Azure NetApp Files)
  • AVD ホストプール内の セッションホストから、上記 ネットワーク共有への NTFS の 読み取り権限。
  • MSIX Packaging tool
  • MSIX Mgr tool
  • MSIX パッケージ用の内部用もしくは外部用の証明書(自己証明書含む)

また、MSIX パッケージ作成用の環境を用意します。
これは、既存のインストーラーを MSIX Packaging tool を用いて変換する際に利用します。

この環境は、MSIX app attach でアタッチされようとしているアプリケーションを展開する環境と同様の構成を取ることを推奨しております。
例) Windows 10 multi-session で 2004 の AVD 環境に展開されようとしている場合は、同じ OS バージョンを利用します。

また、MSIX Packaging tool で、既存のインストーラーを展開される際は、他のアプリケーションや、既定以外のサービスを立ち上げていない状態で実行されることを推奨いたします。

MSIX パッケージ を作成する環境を構成する際の推奨事項の詳細については、以下の公開情報をご参照ください。

変換のために環境を準備する

MSIX パッケージ作成用の環境作成

MSIX パッケージを作成するための環境を Azure VM で用意します。
今回は、Windows 10 Enterprise multi-session, Version 20H2 + Microsoft365 Apps - Gen1 のイメージを基に展開した Azure VM を構築し、この VM 上で MSIX パッケージを作成します。

VM 作成後、以下の公開情報に記載されているように MSIX アプリ アタッチ アプリケーションの自動更新をオフにします。

MSIX アプリ アタッチ アプリケーションの自動更新をオフにする

この VM を日本語化される際は、以下のブログをご参照ください。

AVD ARM 日本語化イメージ作成手順について

MSIX アプリケーションのパッケージ化 (例: PowerShell 7)

MSIX アプリケーションのパッケージ化について説明します。上記で作成した MSIX パッケージ作成用の環境に RDP 接続を行って実施します。
また、MSIX アプリケーションにしようとしているアプリケーションは、まだ MSIX パッケージ作成用の環境にインストールされていない状態で MSIX アプリケーションのパッケージ化を行ってください。
※既にインストールされているアプリケーションで実施すると、MSIX パッケージ作成の途中のエントリーポイントの指定の際に、適切なエントリーポイントが読み込まれないことがございます。

また、以下に記載する手順の詳細な情報につきましては、以下の公開情報をご参照ください。
任意のデスクトップインストーラー (MSI、EXE、ClickOnce、または App-v) からの MSIX パッケージの作成

Microsoft Store アプリを開き、MSIX Packaging Tool を検索してインストールします。

MSIX Packaging Tool を検索して、開きます。

「アプリケーション パッケージを作成します」を選択します。

「このコンピューターにパッケージを作成する」を選択して、「次へ」をクリックします。

コンピューターの準備では、推奨される実施項目内にチェックをつけ、「次へ」をクリックします。

インストーラーの選択では、インストーラーを選択しますが、その際にセッションホスト側で利用するパッケージ署名用証明書を作成する必要があります。

詳細につきましては、以下の公開情報をご確認ください。
パッケージ署名用証明書を作成する

今回は、検証のため、以下のようなコマンドで、自己証明書を作成します。
自己証明書は、あくまで検証用であるため、本番環境では、信頼された証明機関から発行された証明書をご利用ください。
管理者権限の PowerShell プロンプトを開き、以下のコマンドを実行します。
※ 以下の PowerShell 内のパラメータはお客様の環境に併せて適宜変更してください。

1
New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

作成した証明書は、以下のコマンドで確認できます。

1
2
Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

作成した証明書をパスワード付きでエクスポートします。
パスワードおよびファイルパスは適宜変更してください。

1
2
$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

今回は上記で作成した pfx ファイルをパッケージ署名用の証明書として利用します。

また、今回は PowerShell 7 をインストールするため、以下の PowerShell 7 の 公開情報にある、「MSI パッケージのインストール」からインストーラーをダウンロードします。
Windows への PowerShell のインストール - MSI パッケージのインストール

インストーラーと、上記で作成した証明書をそれぞれ MSIX packaging tool で選択します。

パッケージ名、パッケージの表示名、発行元の表示名、バージョンなど、必要な情報を入力し、「次へ」をクリックします。

アプリケーションのインストールが始まります。
通常のインストールと同様に、インストールウィザードに沿ってインストールを進めてください。

インストール終了後、「次へ」をクリックします。
この際に、再起動が必要となるインストーラーの場合は、ここで再起動を選択します。今回は、再起動が必要ないため、「次へ」を選択します。

初回起動時のタスクの管理では、アプリケーションのエントリ ポイントを選択できます。
今回の場合はすでに、pwsh.exe が指定されているため、そのまま、「次へ」を選択します。

「終了しますか」の確認画面で、「はい、次へ進みます」を選択します。

「新しいパッケージの作成」の画面で、いくつかの除外するサービスが自動的に選択されます。
自動アップデートをするサービスがある場合に除外するように設定できます。
MSIX app attach では、MSIX アプリケーションの自動更新はサポートされていないため、もしこの画面で自動アップデートをするようなサービスがあったら、除外する必要があります。
今回は、サービスが検出されなかったため、そのまま「次へ」をクリックします。

「パッケージの作成」の画面では、特に既定の値から変更せず、「作成」をクリックします。

下図のように、作成が完了し、保存場所に .msix 拡張子を持つ、MSIX パッケージ が作成されます。
次に、この MSIX パッケージ を、MSIX app attach パッケージ に拡張する作業を行います。

MSIX パッケージ を MSIX app attach パッケージに拡張する

MSIX mgr tool をダウンロードしてください。
このツールをインストールすることで、今後の作業に必要な MSIX コマンドを実行することができ、MSIX パッケージを VHD(X)形式に変換できます。

本ツールの詳細につきましては、以下の公開情報をご確認ください。
MSIXMGR ツールの使用

MSIXMGR ツールは、msixmgr.zip としてダウンロードされます。解凍すると、x64 フォルダと、x86 フォルダがありますが、今回は 64 bit 環境を想定し、x64 フォルダの中身を利用します。
C ドライブ配下に MSIXappattach という名前の作業フォルダを作成し、x64 フォルダの中身を移動します。

先ほど作成した msix ファイルを MSIXappattach フォルダ配下に移動します。

MSIX イメージを格納するための VHDX を作成します。
この作業の詳細につきましては、以下の公開情報をご確認ください。
Azure Virtual Desktop 用の MSIX イメージを準備する

以降の PowerShell はすべて管理者権限の PowerShell プロンプトで実行してください。
まず、VHD(X)を作成するために、Hyper-V を有効にします。※VM の再起動が発生します。

1
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

以下のコマンドを実行して、VHDX ファイルを作成します。
この際、以下の例では、1024 MB で作成していますが、VHDX が展開された MSIX パッケージよりも十分に大きいことを確認してください。

1
New-VHD -SizeBytes 1024MB -Path c:\MSIXappattach\powershell7.vhdx -Dynamic -Confirm:$false

以下のコマンドを実行して、作成したばかりの VHDX をマウントします。

1
$vhdObject = Mount-VHD c:\MSIXappattach\powershell7.vhdx -Passthru

以下のコマンドを実行して、マウントした VHDX を初期化します。

1
$disk = Initialize-Disk -Passthru -Number $vhdObject.Number

以下のコマンドを実行して、初期化された VHD 用の新しいパーティションを作成します。

1
$partition = New-Partition -AssignDriveLetter -UseMaximumSize -DiskNumber $disk.Number

その際に、以下のようなポップアップが表示されますが、後述の PowerShell コマンドレットでフォーマットをするため、キャンセルをクリックしてください。

以下のコマンドを実行して、パーティションをフォーマットします。この際の出力結果の一番左の列の DriveLetter から、どのドライブにこの VHDX ファイルがマウントされているのか確認できます。

1
Format-Volume -FileSystem NTFS -Confirm:$false -DriveLetter $partition.DriveLetter -Force

マウントされたディスク上に、親フォルダを作成します。
この作業が必要なのは、MSIX パッケージが正常に機能するために親フォルダが必要であるためです。
親フォルダが存在する限り、親フォルダにどのような名前を付けてもかまいません。
今回は、powershell7 という親フォルダを作成します。

管理者権限のコマンドプロンプトを開き、以下のコマンドを実行します。
これは、.msix の拡張子を持つ、MSIX パッケージを、MSIX app attach パッケージ(VHDX)に変換するコマンドです。
-packagePath では、C:\MSIXappattach フォルダ配下の MSIX パッケージを指定しています。
-destination では、現在マウントされているパスで上記に作成した親フォルダを指定しています。
-packagePath, -destination で指定するパラメータは適宜変更してください。
-applyacls は、必要なアクセス権限(ACL)を割り振っています。

1
2
cd C:\MSIXappattach
msixmgr.exe -Unpack -packagePath PowerShell7-x64_7.1.3.0_x64__ad8pwfkyh69vj.msix -destination "f:\powershell7" -applyacls

実行結果は以下のようになります。

マウントされた VHDX にアクセスし、作成した親アプリ フォルダ を開いて、パッケージの内容があることを確認します。

確認後、マウントされた VHDX を以下のコマンドで アンマウント(dismount) します。

1
$vhdObject = Dismount-VHD c:\MSIXappattach\powershell7.vhdx -Passthru

ファイル共有に MSIX イメージ の VHDX ファイルをアップロードする

AVD セッションホストからアクセスできるファイル共有の作成の仕方につきましては、以下の公開情報をご参考ください。
後述の Azure portal で MSIX app attach を設定する を実施する前に、Azure Files にファイル共有を作成しておき、以下の公開情報の通りに、MSIX app attach を設定しておきたいセッションホストに対して NTFS の読み取り権限を付与する作業を行います。

MSIX アプリのアタッチ用にファイル共有を設定する

次に、MSIX イメージの VHDX ファイルを、AVD セッションホストからアクセスできるファイル共有(例: Azure Files)にアップロードします。
アップロードする際は、MSIX パッケージ作成用環境の VM に、Azure Files をマウントする方法で、VHDX を直接 Azure Files にアップロードが可能となります。
Windows で Azure ファイル共有を使用する - Azure ファイル共有をマウントする
下図は、MSIX パッケージ作成用環境の Z ドライブに Azure Files をマウントし、powershell7.vhdx をアップロードした図となります。

Azure portal で MSIX app attach を設定する

本手順につきましては、以下の公開情報に詳細がございますため、ご参照ください。
日本語版のドキュメントの反映が遅れており、フォームに関して、入力が必要である旨の記載がございますが、MSIX app attach はすでに GA されておりますため、こちらは必要ございません。
Azure portal で MSIX アプリのアタッチを設定する

事前準備として、上記で作成した MSIX のアプリケーション が公的に信頼されていない証明書、または自己署名された証明書を使用している場合、以下の手順を実行する前に、MSIX アプリケーションを展開しようとしている AVD ホストプール内の AVD セッションホストで、証明書をインストールしておく必要があります。
以下の公開情報を基に、AVD セッションホスト側で証明書をインストールしてください。
証明書をインストールする

まず、Azure Portal を開き、Azure Virtual Desktop へ移動します。
次に、MSIX アプリケーションを配置したいホストプールを選択します。
左側の管理ペインから、MSIX パッケージを選択し、追加をクリックします。

次に、Azure Files から、アップロードした VHDX ファイルのパスを取得します。
下図のように URL を取得し、https://xxxx/ の https: を削除し、スラッシュ(/)をバックスラッシュ(\)へと置換して、共有パスを用意します。
例: \XXXX.file.core.windows.net\msixappattachdemo\msixappattach\powershell7.vhdx

上記の方法で用意したパスを、MSIX パッケージの追加の画面で入力します。
この入力の際に、MSIX パッケージのアクセス権限のチェックや、証明書のチェックの処理が実行されます。
例えば、セッションホストに、事前に MSIX パッケージを作成した際の証明書がインストールされていない場合、以下のようにエラーが発生します。

チェック処理が成功した場合、下図のように、表示名や、登録の種類、状態を設定できます。
オンデマンド登録は高速ユーザー ログオン用に最適化されているのに対し、通常の登録はアプリケーションのスタートアップ用に最適化されています。
また、MSIX パッケージには 2 つの状態があります。
アクティブなパッケージはユーザーに配信されます。
非アクティブなパッケージにはアクセスできません。
設定後、追加をクリックします。

PowerShell 7 の MSIX パッケージが正常に ホストプール に追加されました。

次に、MSIX アプリを、アプリケーション グループに追加します。
今回は、msixtest01 というホストプールに、デスクトップのアプリケーション グループである msixtest01-DAG がありますが、Remote App 用のアプリケーション グループがまだないため、MSIX アプリを公開するために、まずはアプリケーション グループから作成します。
下図のように、「追加」をクリックします。

Remote App 用の アプリケーション グループ msix-remoteapp を作成します。
※ この際に、アプリケーション グループ の種類で、デスクトップが選択できないのは、1つのホストプールごとに存在できる デスクトップ アプリ グループ は一つのみであるためです。

次に、アプリケーションの追加をクリックし、アプリケーション ソース から 「MSIX パッケージ」を選択し、先ほど追加した MSIX パッケージである PowerShell 7 と、各種情報を入力し、保存します。

「割り当て」では、このアプリケーションを利用できるようにしたいユーザーを割り当てます。

「ワークスペース」では、既存のワークスペースに登録します。今回はすでにあるデスクトップ アプリケーショングループ が登録されている ワークスペースを選択します。

これで、アプリケーショングループの作成を行います。
作成完了後、下図のように、アプリケーションの種類が MSIX のアプリケーションが、RemoteApp のアプリケーショングループに追加されていることが確認できます。

MSIX アプリケーションの RemoteApp のアプリケーショングループを割り当てたユーザーでAVD デスクトップクライアントからログオンして、「最新の情報に更新」をクリックします。
該当のホストプールに、PowerShell 7 (x64) のアプリケーションが公開されていることが確認できます。

この MSIX アプリケーション は、オンデマンド登録されているため、このユーザーが、この Remote App のアプリケーショングループを選択して、ログオンを試みた際に、割り振られたセッションホストに対して、AVD コントロールプレーンから、MSIX アプリケーションがマウントされる動作となります。

早速、PowerShell 7 (x64) のアプリケーショングループを選択し、認証後、PowerShell が立ち上がるため、PowerShell で コンピューター名を取得します。

実際に上記PowerShellで確認したセッションホストのマシンに別のユーザーで RDP 接続して、セッションホスト上では、どのように MSIX アプリケーションが見えているのか確認してみます。
以下の図では、msix-test01-0 という名前のマシン上で、別のユーザーから PowerShell を開いている図となります。
PowerShell というキーワードでアプリケーションを検索しても、このユーザーには、PowerShell 7 が表示されていません。
これは、この別のユーザーには、PowerShell 7 が割り振られていないためです。
また、タスクマネージャーを見ると、今回 MSIX アプリを公開したユーザー wvduser01 では、pwsh.exe が起動していることがわかります。
この pwsh.exe には、別のユーザーからアクセスができないように制御されています。

今回の例では、RemoteApp アプリケーショングループとして、MSIX アプリケーションの公開を行いましたが、デスクトップ アプリケーショングループとしても同様に公開をすることが可能となります。
その場合は、既存のデスクトップ アプリケーショングループにアプリケーション ソースが「MSIX パッケージ」のアプリケーションを追加いただくことで、実現が可能となります。

まとめ

本記事では、MSIX app attach を利用することで、マスターイメージと、アプリケーションを分離することができるというコンセプトの部分を説明させていただきました。
また、実際にMSIX パッケージを作成する環境を構築し、MSIX パッケージを作成するところから、AVD で MSIX app attach を設定するところまでの一連の流れをご紹介いたしました。

本ブログ記事が、お客様の MSIX app attach 導入の一助になれましたら、幸いでございます。

関連情報

Microsoft Learn - Azure Virtual Desktop 用の MSIX アプリ アタッチを使用してアプリケーションを展開する

MSIX app attach is now generally available (from Tech Community)

Learn how to configure MSIX app attach (via the Azure Portal) packages containers on Windows 10 Enterprise multi and single-session for Azure Virtual Desktop (from Christiaan Brinkhoff blog post)

MSIX AppAttach Portal | Azure Virtual Desktop - from Azure Academy youtube video

MSIX App Attach - the future of application delivery, a sneak peek of the upcoming Azure portal integration (from Tom Hickling blog post)

更新履歴 - Update History

  • 2021/04/26 : 本 Blog の公開
  • 2021/06/17 : WVD の名称が AVD に変更