Azure MarketPlace のイメージから直接デプロイしたVM (AVD) に MSIXアプリアタッチ を機能させる

# ご注意
以下の公開情報で案内されている通り、MSIX アプリ アタッチは、2025年6月1日 に非推奨になることが発表されています。
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-overview?wt.mc_id=mvp_407731

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4c308cfb-ba8b-41cc-b6a2-bfe72868ca93.png)

せっかく記事にしたのに～ とは思いますが、今後は アプリアタッチ を使いましょう。
※いずれ アプリアタッチ の記事も書かなければ・・・

# はじめに
現在は、Azure Virtual Desktop (AVD) で、ホストプールと仮想マシンを作成する際に、どれだけシンプルな画面からデプロイさせられるか？ を研究しています。
さらに、事前にゴールデンイメージを作成せずに、全自動でデプロイされ、利用者が接続する時には MSIXアプリが利用できるように構成することを目的としています。

その際には、いくつかのハードルがあったのですが、そこで得られたノウハウを記事にしていこうと思っています。以下のリンク先で シリーズ化 していますので併せて参照ください。

https://qiita.com/carol0226/items/7318fdd7aff780f5177c

その中でも、この記事では、MSIXアプリアタッチ について説明しています。

# MSIXアプリ とは
一言で言うと、Windowsのアプリを パッケージで１本化して 管理＆展開をしやすくします。
実行時には [アプリコンテナー](https://learn.microsoft.com/ja-jp/windows/msix/overview#benefits-of-app-containers "アプリコンテナーの利点") で隔離され 他のアプリとの関係も排除され 独立して実行されます。そのため、１台のマシンに複数のアプリを導入した際の相性問題のようなことが発生しづらくなります。

まとめると、アプリの機能はそのままに、機動性、柔軟性、独立性 を高くすることができます。

https://learn.microsoft.com/ja-jp/windows/msix/overview?wt.mc_id=mvp_407731

# MSIXアプリのアタッチ とは
MSIXアプリの、機動性・柔軟性・独立性をフルに活かして、AVD 上で動作させる仕組みです。
MSIXアプリを あらかじめ VHD, VHDX または CIM という仮想ディスクとして イメージ化しておき、ユーザーが VM を利用しようとしたときに、オンデマンドで 仮想ディスク を VM にマウントし MSIXアプリを利用できるようにします。

通常は、管理者が ゴールデンイメージ という VM の元となるイメージを作成する際に、イメージ内にアプリケーションをインストールしておく必要がありますが、OS のバージョンと アプリケーションの組み合わせの分だけ ゴールデンイメージを作成しておく必要があり、管理が煩雑になってしまうという課題もあります。

MSIXアプリのアタッチを活用すれば、実行環境としての VMイメージ と、複数の MSIXアプリ を分離して配備しておき、用途に応じて 自由に組み合わせて 利用者に提供できるようになります。

仮想ディスクは、OSの機能として VM起動中にオンデマンドで接続して利用できる仕組みになっています。
USBメモリをPCに挿入したら すぐに読み込めますが、それと同じような理屈になっています。
例えると、MSIX化したアプリを、１つずつ USBメモリに入れておき、必要なUSBメモリを 仮想マシンに接続して起動するという感じです。その接続を 自動的に割り当て（アタッチ）してくれている・・・という風に考えてもらうと良いと思います。

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/what-is-app-attach?wt.mc_id=mvp_407731

# 本記事の位置づけ
私が、MSIXアプリアタッチの動作検証を行った際には、主に 公開情報を読み解いて 作業をおこないましたが、あいまいな記述が多く 大変苦労しました。
技術的に理解して、それらを体系的にまとめて、記事にしようとした際に、以下の Microsoftのブログ記事をみつけました。大変わかりやすくまとめられています。

https://jpwinsup.github.io/blog/2021/04/26/RemoteDesktopService/AVD/avd-how-to-deploy-msix-app-attach/

MSIXアプリアタッチの手順は、非常にボリューミーになるため、この記事へのリンクと 補足説明という形で記載させていただく事にしました。ご承知おきください。

# MSIXアプリのアタッチ の動作要件
以下に重要な点を挙げました。
- AVD 上で動作します
- MSIXパッケージ(msixファイル形式) を イメージ化 (仮想ディスク形式) して、ファイル共有に配置しておく必要があります。
- ファイル共有は、各VM から参照できる必要があります。
- MSIXパッケージは、証明書で署名されている必要があり、 アタッチされる VM 側は、この証明書が「信頼されたユーザー」のストアに配布されている必要があります。
（必要要件）
https://jpwinsup.github.io/blog/2021/04/26/RemoteDesktopService/AVD/avd-how-to-deploy-msix-app-attach/#%E5%BF%85%E8%A6%81%E8%A6%81%E4%BB%B6

# 利用のための段取り
おおきく、３つの段取りに整理してみました。
１. MSIXアプリの作成
　→　ここで作った環境をバックアップしておくと 繰り返し再利用が可能です。
２. MSIXアプリの配置
　→　この処理で Windowsアプリから MSIXアプリを作成します。
３. MSIXアプリの配布から実行
　→　作成した MSIXアプリを AVDに展開できるように構成します。

## 1. MSIXアプリの作成
  1-1. 作業環境の選定と手配
  1-2. 証明書作成
  1-3. 作業環境の準備
  1-4. 通常アプリ を MSIX形式 でパッケージ化する
  1-5. MSIXアプリ をイメージ化する（msix -> vhdx)

### 1-1. 作業環境の選定と手配
MSIXアプリを作成するための環境を用意する必要があります。
１つのWindowsアプリケーションをMSIX化する都度、クリーンな環境が推奨されます。
これを満たせる環境であれば、何でも良いのですが、決まっていないだけに 迷うところです。

私としては、以下の３通りを候補に挙げてみましたので、参考に手配頂ければと思います。
① Azure VM（Windows 10 Pro 22H2 Gen2）＋[日本語化](https://qiita.com/carol0226/items/454271ea7924bc587d1e#os-%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96 "私が以前に投稿した日本語化記事")
MSIXの動作を試すだけなら、新規で Azure VM をデプロイして使ってしまえば良く、手順さえ理解しておけば、必要な都度 新しい VM をデプロイすれば良いです。実は 手離れが良くて楽です。まずは、MSIXの動作を確認したいという場合なら、これで十分です。

② Azure VM（上記の①）と、Disk のスナップショットの併用
何種類かのMSIXアプリを作成する場合、①の方法だと、VMをデプロイする都度 日本語化の処理や MSIXツールのインストールが発生して手間になります。そのため、[仮想ハードディスクのスナップショット](https://learn.microsoft.com/ja-jp/azure/virtual-machines/snapshot-copy-managed-disk?tabs=portal "仮想ハードディスクのスナップショット") の機能を使って、クリーンな作業環境のバックアップを作成しておき、毎回 スナップショットから作業環境に戻すことで、効率化することができます。

③ Hyper-V環境を利用する
Hyper-V上に仮想マシンを用意して、チェックポイントの機能で 都度 クリーンな作業環境に戻して再利用することができます。
本格的に運用する場合は、この方法が効率が良いと思いますが、初めから これを目指さなくても良いと思います。もし Hyper-V環境が手元にあり、操作方法も理解しているなら、初めから活用いただくのも手です。
[Azure上に Hyper-V を構築する手順](https://qiita.com/carol0226/items/b5ca1ec882742e208e00 "Azure で Hyper-V on VM を動作させる") も、過去に記事化していますので、試してみたい方は参照ください。

:::note info
他にも、VMware や Oracle Virtual Box などのサードパーティのツールを使っても良いですし、とにかく MSIXアプリ を作成する都度、クリーンな Windows OS を使いなれた方法で準備する方法を考えていただければ OK という事です。
:::

### 1-2. 証明書作成
MSIXアプリのアタッチでは、以下のタイミングで証明書が使われます。
- アプリのパッケージ化
- Azure Portal で アプリケーショングループに MSIXアプリを割り当てる
- アプリを VM 上で実行する
※いずれも、アプリをパッケージ化した時の証明書が必要です。

この章では、このための証明書を作成します。
まず、「1-1.」で準備した作業環境上で 自己署名証明書を発行します。

１. 以下の PowerShell をメモ帳などにコピーします。
このコマンドの元は、[このサイト](https://learn.microsoft.com/ja-jp/windows/msix/package/create-certificate-package-signing#use-new-selfsignedcertificate-to-create-a-certificate "New-SelfSignedCertificate を使って証明書を作成する") から引用しています。
````
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}")
````
２. 以下のパラメータを、修正例を参考にして 任意に修正します（それ以外の箇所は変更しない）
テスト目的なら、修正せずに使ってしまっても問題ありません。
【-Subject】
　（修正前）"CN=Contoso Software, O=Contoso Corporation, C=US"
　（修正例）"CN=Carol0226 MSIX Application, O=Carol0226 Corporation, C=JP"
【-FriendlyName】
　（修正前）"Your friendly name goes here"
　（修正例）"MSIX Application for AVD"

【修正後の全体象】
````
New-SelfSignedCertificate -Type Custom -Subject "CN=Carol0226 MSIX Application, O=Carol0226 Corporation, C=JP" -KeyUsage DigitalSignature -FriendlyName "MSIX Application for AVD" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
````

３. 作業環境上で PowerShell（管理者）を開いて貼り付け、実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9f7fbbad-29e0-9849-f58e-9b9936c44a1e.png)
４. 作成した証明書は、「ユーザー証明書の管理 (Certmgr.msc)」ツールで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e8f9f998-f195-d800-018a-030fb57b3e87.png)
（参考）証明書をダブルクリックして表示させると、以下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f5c66f59-e693-338b-3752-7ee26771289d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/55a10348-1cc3-34b9-d479-b91b1d96a250.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e96dd195-5180-9fcf-cbf7-4b9fbb5181ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fb2f4721-8f24-f5cd-2abc-ac5ed31077b2.png)
５. この証明書を AVD に配布するためにエクスポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4490d6c3-c99b-a246-d92e-3740806c3b8a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f050aaec-9a66-9bc1-de22-6f8ab0df8703.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bc3115ae-3dcb-ad88-d287-b2c4e772cc84.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b7f8929d-e94a-548d-4964-30bf035eaa5c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b572b34c-ac2c-f524-d633-49075901d3c6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/27a1ae03-d4d4-c617-5764-ad999cb18e81.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7790069c-99ef-dcc2-297b-e3a207971039.png)

６. この証明書が MSIXパッケージを実行する際に 参照されるように「信頼されたユーザー」の証明書ストアに移動しておきます（個人ストアから、信頼されたユーザーストアへドラッグ＆ドロップできます）
※個人ストアのままだと、MSIXパッケージ用とはみなされません。注意しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fc958cbe-48af-d3e5-b05d-dcf098306a0f.png)

### 1-3. 作業環境の準備
引き続き、「1-1.」で作成した作業環境で操作を続けます。
1. 以下の [公開情報](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-azure-portal#turn-off-automatic-updates-for-msix-app-attach-applications?wt.mc_id=mvp_407731 "MSIX アプリ アタッチ アプリケーションの自動更新をオフにする") に記載されているコマンドを実行します。
Windows Update などのバックグラウンド処理があると、MSIXアプリ作成時の妨げになるため、停止しておく必要があります。
````
rem Disable Store auto update:

reg add HKLM\Software\Policies\Microsoft\WindowsStore /v AutoDownload /t REG_DWORD /d 2 /f
Schtasks /Change /Tn "\Microsoft\Windows\WindowsUpdate\Scheduled Start" /Disable

rem Disable Content Delivery auto download apps that they want to promote to users:

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager /v PreInstalledAppsEnabled /t REG_DWORD /d 0 /f

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug /v ContentDeliveryAllowedOverride /t REG_DWORD /d 0x2 /f
````
２. 以下のサイトへアクセスして「MSIX Packaging Tool を入手する」を押します。
https://learn.microsoft.com/ja-jp/windows/msix/packaging-tool/tool-overview?wt.mc_id=mvp_407731
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/10e49185-5416-7600-a9b1-82b5c1467bc7.png)
３. 以下の画面で、「Microsoft Store アプリの取得」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/67981ba4-0d9b-2701-1927-a81a881c7ae1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f0a4c093-aa43-6b3c-1036-77d3c11de3f4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d792b201-28ae-0322-9fac-84e64d8b52c4.png)
以下の画面がひらけば「OK」なので、「X」を押して 一旦 ウィンドウを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f6a9ee2a-bcf6-b91a-6249-b3d7d674633c.png)
この状態で、作業環境の準備が整ったので、Cドライブのバックアップを取得してください。
※バックアップは、VMのスナップショットや Hyper-Vのチェックポイント等で取得してください。

### 1-4. 通常アプリ を MSIX形式 でパッケージ化する
引き続き、「1-1.」で作成した作業環境で操作を続けます。
以下に、何種類かのアプリを MSIXでパッケージする手順のリンク先を紹介しますので、これを参考にして アプリを MSIX形式 でパッケージ化してください。
- [Azure PowerShell v7](https://jpwinsup.github.io/blog/2021/04/26/RemoteDesktopService/AVD/avd-how-to-deploy-msix-app-attach/#MSIX-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%8C%96-%EF%BC%88%E4%BE%8B-PowerShell-7%EF%BC%89
 "Azure PowerShell v7")
- [Visual Studio Code](https://qiita.com/takeokams/items/2d0c687c731772be12d6#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%8C%96 "Visual Studio Code")
- [Google Chrome](https://qiita.com/carol0226/items/f1ad8b02a6d49125a1a7
 "Google Chrome")　※Chromeは私が書いた記事です。💡おススメ！

https://learn.microsoft.com/ja-jp/windows/msix/packaging-tool/create-app-package?wt.mc_id=mvp_407731

### 1-5. MSIXアプリ をイメージ化する（msix -> vhdx)
引き続き、「1-1.」で作成した作業環境で操作を続けます。
この章では、前章で作成した MSIXパッケージをイメージ化します。
1. Cドライブ配下に、以下のように msix というフォルダを作成し、前章で作成したパッケージを移動しておきます（フォルダ名は任意）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/92445a49-193e-c86e-0e07-eccd483e3546.png)

1. 以下のサイトの「前提条件」で紹介されている [MSIXMGRツール](https://aka.ms/msixmgr "MSIXMGRツールの直接リンク") を作業環境にダウンロードします。
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/msix-app-attach-create-msix-image?tabs=vhdx?wt.mc_id=mvp_407731#prerequisites
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f9da2fd0-437f-52bd-7ff1-9fb7a10a0902.png)

1. ダウンロードした ZIPファイルを解凍します。
以下は、Cドライブ配下に msixmgr というフォルダを作って 解凍し x64フォルダを開いた様子。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4f26b8bd-3936-dc4d-0bc0-be2c3f162f28.png)

1. 以下のコマンドを実行します。
````
cd C:\msixmgr\
cd x64
.\msixmgr.exe -Unpack -packagePath "C:\msix\GoogleChrome_1.0.0.0_x64__gt68tsy8y2y8w.msix" -destination "C:\msix\GoogleChrome.vhdx" -applyACLs -create -fileType vhdx -rootDirectory apps
````

5．実行結果は、以下の通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3c12dac2-1970-ed88-9572-866b2b6d19bc.png)

6．以下の通り、.vhdx ファイルが出来ていれば OK です。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4b297b2a-a869-23af-9994-eff3b5f34247.png)

（Azure Virtual Desktop 用の MSIX イメージを作成する）
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-create-msix-image?wt.mc_id=mvp_407731&tabs=vhdx

## 2. MSIXアプリの配置
MSIXアプリ(vhdx) をファイル共有に配置します

### 2-1. ファイル共有について
MSIXアプリ を配置するための ファイル共有 は ドメインに参加されていて NTFSと共有の権限管理を行えることが要件になっていて、以下の４つの仕組みから選択することが一般的と思います（おそらくSMB＋Kerberos認証に対応しているストレージであれば良いのでしょう）
- [Windows Server のファイルサーバー](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/create-host-pools-user-profile "Windows Server のファイルサーバー") の機能 で提供される ファイル共有
- Azure ストレージアカウントの [Azure Files](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/fslogix-profile-container-configure-azure-files-active-directory?tabs=adds "Azure Files とは") で提供される ファイル共有
- [Azure NetApp Files](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/create-fslogix-profile-container "Azure NetApp Files とは") で提供される ファイル共有
- Windows Server と Azure Stack HCI で構成した [記憶域スペースダイレクト](https://learn.microsoft.com/ja-jp/azure-stack/hci/concepts/storage-spaces-direct-overview "記憶域スペースダイレクト") で提供された ファイル共有

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/store-fslogix-profile?wt.mc_id=mvp_407731

今回の検証では、AVD の一般的な構成であり、コストも安価となる Azure ストレージアカウントのファイル共有を選択することにしました。

:::note warn
Windows ファイルサーバーを使う場合、ADサーバー と同居させて構築すればコスト安ではありますが、ファイルサーバーを独立させたり、冗長化したりを考えると Azure Files の方が安価になると思います。
そのため、検証用途なら Windowsファイル共有もあると思いますが、本番運用で採用されるのかは疑問であり、あえて記事化する意味も無くなってしまうと思い、採用しませんでした。とにかくMSIXアプリアタッチ の機能を動かしてみたいという人は、Windowsファイルサーバーでやってみるのも手かと思います。
:::

### 2-2. Azure Files を構成し、ドメインに参加する 
この ファイル共有 の準備は、当初 それほど難しく考えていなかったのですが、これが 思っていたよりも大変でした。
この記事と一緒に掲載できないほどのボリュームとなったため、以下の記事で説明しています。
この記事で Azure Files の構成とドメイン参加 までを実施してください。

https://qiita.com/carol0226/private/942dc353dd27f541b74c

### 2-3. 作成したファイル共有を MSIXアプリアタッチ 向けに権限設定する
1. 前章で作成した ファイル共有に、アクセス制御(IAM) より、アクセス権を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b75d102c-b306-b07e-8f2b-340263b143b2.png)

1. ロール設定で、検索窓に「記憶域」と入力し、「記憶域ファイルデータの SMB 共有の管理者特権の共同作成者」を選択して、「次へ」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d8245772-c753-7d27-92bc-99cac5ba5c2c.png)

1. 以下の画面の番号を参考に、以下のグループやメンバーを選択します。
なお、「オンプレミスから同期されたセキュリティグループ」に、あらかじめ オンプレミスのコンピューターや ユーザーを所属させておきます。

|アカウント|アカウントの種類| 所属するリソース |
|:-:|:-:|:-:|
| AVDSessionHosts | オンプレミスから同期された セキュリティグループ |セッションホストのコンピューターオブジェクト |
| AVDValidationUsers | オンプレミスから同期された セキュリティグループ | AVDへ接続するユーザー |
| noguchisu | Azure AD ユーザー | グローバル管理者 |

※「nogushu」は、各テナントのグローバル管理者 に読み替えてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d99132f6-dc5f-2b44-3e4c-549d4ca97303.png)

4．以下の通り、アクセス権が付与されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e460c7ff-3cda-5d84-77ef-73c219d90c76.png)

5．以下の通り、ファイル共有の画面で、「＋ディレクトリの作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a7e6390a-a42f-0a68-1ad1-7190ef6f271d.png)

6．以下の通り、MSIXアプリアタッチ用の ディレクトリ名を設定して「OK」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7825e623-8bf6-1443-a9b6-6624c0ec03be.png)

7．以下の通り、作成した ディレクトリを開き、「↑アップロード」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/84b8b43c-36e8-675e-4b66-2eb7f52e1722.png)

8．以下の通り、赤枠内に 作成した MSIXアプリ(.vhdx) をドラッグ＆ドロップし、「アップロード」を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8103ac88-4969-5026-b3b0-1c6941dc7483.png)

9．アップロードが完了し、以下のような画面になっていれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b9814da6-4a17-0d02-663d-01f2409d28fe.png)

（MSIX アプリのアタッチ用にファイル共有を設定する）
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-file-share?wt.mc_id=mvp_407731

## 3. MSIXアプリの配布から実行
MSIXアプリを AVD 上の VM で実行できるようにするには、以下のアクションが必要です。
  3-1. VM へ 証明書を GPO で配布する
  3-2. MSIXアプリを AVDのホストプールに登録する
  3-3. MSIXアプリを AVD のアプリケーショングループに登録する

### 3-1. VM へ 証明書を GPO で配布する
ドメインコントローラーで操作します。
1. 「グループポリシーの管理」ツールを開き、セッションホストが配置されている OU を右クリックして「このドメインに GPO を作成し、このコンテナーにリンクする」を選択
※下図の場合は、AVD という名称の OU 配下に セッションホストのコンピューターオブジェクトが配置してあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ebc5c990-5ed2-3893-448b-880f202f0a6a.png)

1. GPO の名称として、わかりやすい名前をつけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/834d4b25-aa23-1e25-cbb1-2478cc01cdcf.png)

1. 追加した GPOの名称を右クリックして、「編集」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/81150809-6e1e-c96a-d6a5-e5993dd9ec63.png)

1. 下図の通り、赤枠の「v」を開いていき「信頼されたユーザー」を開いたら 右クリックして「インポート」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6324404a-8d91-2170-0346-0205920dfc50.png)

1. 証明書のインポートウィザードが開いたら、「次へ」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d551a1a7-2806-8dcf-b350-4b708aea922b.png)

1. 下図では まず、緑枠で pfxを選びます。
すると、拡張子が pfxファイル を指定できるようになるので MSIXアプリの署名に使用したものとおなじ 証明書(.pfx) を指定して「開く」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4deb8c4f-77f3-2374-d867-df566637caf5.png)

1. ファイルが選択されたことを確認して「次へ」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7c61a474-42db-f057-e94a-119afc7db3a5.png)

1. 証明書 (.pfx) に設定されているパスワードを入力して「次へ」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c853995c-4766-3813-6b6e-f279747d92ba.png)

1. 「証明書をすべて次のストアに配置する」を選択して「信頼されたユーザー」を指定し「次へ」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/645e74cd-5e47-ca2e-1374-abaf1500adfd.png)

1. 以下の画面になったら「完了」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1911d6b5-9849-a21c-26e4-28afaed37b98.png)

1. OK を押して、閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6a69d609-ab92-8535-9cfd-1b4cfea38453.png)

1. 一覧に 以下の通り 署名書が追加されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/61d3e241-73cb-5ad6-935f-a1d6c2cbedff.png)

以上で、GPO によって AVD OU 配下にあるコンピューターの 信頼されたユーザー ストアに MSIXアプリ用の証明書が 自動配布されます。

### 3-2. MSIXアプリを AVDのホストプールに登録する
1. 前章でアップロードした vhdxファイルのプロパティを開き、URLをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ccf327d8-ae61-84c8-9e6f-43af6985f3b0.png)

1. コピーした URL をメモ帳などに貼り付けして、以下を参考に 書き換えます。
（変更前）https://carol0226storage.file.core.windows.net/share/msix-app-attach/GoogleChrome.vhdx
（変更後）\\\carol0226storage.file.core.windows.net\share\msix-app-attach\GoogleChrome.vhdx

1. Azure Virtual Desktop のリソースを開き、MSIXアプリを登録したい ホストプール を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a82f7dd8-6c5a-5fd6-4bc6-19a63081c26b.png)

1. 以下のとおり「MSIXパッケージ」を選択し「＋追加」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f8aab79b-dd93-3bfa-24f3-52399682b473.png)

:::note warn
ホストプール内の VM が起動されており、更に 証明書が信頼されたユーザーのストアにインポートされていないと、MSIXイメージの追加ができないので、注意してください。
:::

上記の要件を満たせていない場合は、以下のように 「利用可能な仮想マシンが含まれていません」と表示されます。その場合は、VMの電源と証明書の２点について 確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fed8d3bd-dd76-ecfc-24fe-a4fa344a4ce0.png)

1. 「＋追加」を押したあと、以下のように「MSIXパッケージの追加」の画面が表示されれば OK です。赤枠内に 先ほど メモ帳で編集した MSIXアプリ のパスを貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b28547db-be0e-d6da-b528-4acf838558f8.png)

1. もし パスの入力を誤った場合は、以下のように表示されます。
その場合は、パスのスペルミス、ファイル共有のアクセス権の設定ミス などを疑ってみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5bac730b-429c-b7eb-9873-5221ea01d706.png)
※該当のセッションホスト に、RDP接続して イメージパスの共有フォルダにアクセスできるかどうかでも切り分けできます。

1. パスが正しく入力され セッションホストから vhdxファイルへのアクセスが確認できたら、以下の画面になるため、追加項目を入力＆選択して「追加」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0628ad6f-6d42-ee8d-dfd5-45ce039a8087.png)

1. MSIXパッケージの登録に成功し、以下のような画面になれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/adf5ca83-6d89-0b49-41af-a2d81ce6c25f.png)

以上で、MSIXアプリを アタッチするための構成が完了しました。

（MSIX イメージをホスト プールに追加する）
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-setup?tabs=portal&pivots=msix-app-attach&wt.mc_id=mvp_407731#add-an-msix-image-to-a-host-pool

### 3-3. MSIXアプリを AVD のアプリケーショングループに登録する
最後に、利用者と MSIXアプリの紐づけを行います。
※これを行わないと、AVDのデスクトップ上に MSIXアプリが表示されません。

1. 以下の通り、ホストプール画面で「アプリケーショングループ」を選択し MSIXアプリを割り当てたいホストプールを選択します（ここで選択したホストプール上で、割り当てた MSIXアプリが使用できるようになります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b0fc02db-b405-d51f-c2f0-0e03189e3bf6.png)

1. アプリケーション を選択し「＋追加」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bc6fb807-ebfa-1bcc-23ba-2659a7ba1b25.png)

1. 以下の画面で、緑枠 のリストで 登録されている MSIXアプリを選択できます。
赤下線部分で アプリの名称等を決めて「保存」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b77c37c2-3203-4a96-4abc-993528557b76.png)

1. 登録が終わると、以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9bc31310-fccd-81cd-59dd-b0571ec84178.png)

1. 以下の「割り当て」の画面で、アプリケーショングループと ユーザーグループが 紐づけされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c7aad3e3-7003-42b5-8810-664008e8fa7b.png)

（MSIX アプリをアプリケーション グループに公開する）
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-setup?tabs=portal&pivots=msix-app-attach&wt.mc_id=mvp_407731#publish-an-msix-application

:::note info
うまく構成が完了すると、以下の通り AVD へ接続した際に MSIXアプリが利用できるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/435ba857-2fd6-50e6-9234-5f3aad5d0100.png)
:::

:::note warn
なお、私が確認する限りは、MSIX版の Chrome の初回起動時に デスクトップ上に ショートカットアイコンが自動作成されますが、このリンク先には Chrome がなくて リンク切れです。
Chromeの初回起動処理が MSIXを意識していないために このような振る舞いになります。
本来は、このショートカットが作成されないようにするとか、作成されたら自動削除されるような処理と組み合わせた方が理想的ですが、まだ その方法まで解明できていません。
:::

# 参考
## AVDセッションホストのディスク構成
AVDの利用者に ホストの管理者権限を付与すると 下図の通り「ディスクの管理」を表示できます。
以下の図では、赤枠が MSIXアプリアタッチによって割り当てられた vhdxディスクということになります。
なお、緑枠は FSLogix の機能で割り当てられた プロファイルコンテナー です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3c7c0fff-d85d-7d25-2c5d-74542473ab94.png)

## URL
本記事執筆の際に、参考にさせていただいサイト

https://jpwinsup.github.io/blog/2021/04/26/RemoteDesktopService/AVD/avd-how-to-deploy-msix-app-attach/