この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
はじめに
AzureVirtualDesktop(AVD)はWindows10などのクライアントOSをマルチセッションで利用できるVDIとして注目のソリューションです。今回はAVDで配信するアプリケーション登録の一つであるMSIXを用いた方法を紹介したいと思います。
実施環境
①AVDセッションホスト:Windows11 multisession
②作業マシン:windows 11(こちらは可能ならセッションホストと同じバージョンのOSが良いです)
※今回は所定のアプリをパッケージ化(インストーラーをMSIXアプリとして使用できる状態とする)部分かr紹介していきます。この作業ではパッケージ化するための作業用マシンが必要となるため、単にMSIX登録をするだけでしたら不要です。
※Azureの仮想マシンを作業マシンとして使用する場合はサイズをDv3シリーズなどの
Hyper-Vが使用できるサイズを使用してください
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization
③アプリ配信用サーバ:windows server 2019(プライベートIP 10.0.1.7)
※こちらもアプリで使用するvhdの格納用のサーバーですのでAzureFilesや各種ファイルサーバで代用可能です。セッションホストはこのサーバにアクセスできるようにしてください。
シナリオ
今回はこちらのMarcketPlaceで提供されている標準のwin11をセッションホストとして使用します。
作業VM作業
以下の手順で実施していきます
①:Hyper-Vの有効化
②:証明書の発行
③:パッケージ化するアプリのインストール
④:MSIX Packaging Toolのインストール
⑤:msixmgr ツールのインストール
⑥:アプリのパッケージ化
⑦:MSIXアプリ用VHD作成
⑧:VHDおよび証明書の格納
上記の手順で実施します。
①:Hyper-Vの有効化
まずはHyper-Vを有効化します。
以下のスクリプトをPowerShellにて実行します。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
こちらを実行すると再起動を求められのでyを押して再起動します。
②:証明書の発行
この手順は以下を参考としています
https://docs.microsoft.com/ja-jp/windows/msix/package/create-certificate-package-signing
作業としては単純で、以下のスクリプトをPowerShellにて実行します。
今回は証明書の期限を10年間に延ばしています。
“CN=<アプリ名>”は”CN=Contoso Software”のような形で使用したアプリケーションの名前を任意で入れてください。
New-SelfSignedCertificate -Type Custom -Subject “CN=<アプリ名>” -KeyUsage DigitalSignature -NotAfter (Get-Date).AddYears(10) -CertStoreLocation “Cert:\CurrentUser\My” -TextExtension @(“2.5.29.37={text}1.3.6.1.5.5.7.3.3”, “2.5.29.19={text}”)
証明書を出力します。
以下のスクリプトをを実施してください
<パスワード>には適当な文字列を
<Certificate Thumbprint>には上図の7BA8~から始まる文字列を入れてください
※ここは証明書ごとにことなるのでご自身の環境でご確認ください。
<FilePath>にはファイルの出力先とファイル名を入れてください。
$password = ConvertTo-SecureString -String "<パスワード>" -Force -AsPlainText
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password
Export-Certificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.cer
③:パッケージ化するアプリのインストール
iTunesのインストーラーをダウンロードしてきます
④:MSIX Packaging Toolのインストール
Microsoft storeからアプリを取得します。
必要な項目のチェックが進むとNextが押せるようになるので次に進みます
※初回時はツールドライバーのインストールが実施されます。
それぞれにパッケージ化したいアプリのインストールの絶対パスおよび
認証に使う証明書情報を入れて次に進みます
パッケージの名前およびバージョン等を入れます
ここで入力する名前は適当で問題ありません。わかりやすい名前やバージョンを入力します。
アプリのインストールが始まるので進めていきます
インストールが終了したら次に進みます
また、この時必要に応じて再起動を行います
自動アップデートなどのシステム等が入っている場合は取り除いて次に進みます
不要なレポートを適宜取り除いて次に進みます
必要に応じて出力先を選んで次に進みます
パッケージ化が完了したら閉じます
出力先をデフォルトのデスクトップにしておくとデスクトップ上にファイルが作成されているかと思います。これでパッケージ化は完了です。
⑦:MSIXアプリ用VHD作成
この手順はこちらを参考にします
https://docs.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-image-prep#expand-msix
まずは入れ物であるvhdを作成します。
(特別な事情がない限りはvhdxでの作成を推奨します)
PowerShellで実行してください。
<size>は⑥で作ったパッケージの5倍程度がおすすめです
2倍,3倍程度でも失敗することがありました。
<name>はアプリの名前等で適当につけてください。
※ここでエラーが出る場合はHyper-Vが有効化されていない可能があります。
$vhdname=<name>
New-VHD -SizeBytes <size>MB -Path "c:\temp\$vhdname.vhdx" -Dynamic -Confirm:$false
$vhdObject = Mount-VHD “C:\temp\$vhdname.vhdx” -Passthru
$disk = Initialize-Disk -Passthru -Number $vhdObject.Number
$partition = New-Partition -AssignDriveLetter -UseMaximumSize -DiskNumber $disk.Number
Format-Volume -FileSystem NTFS -Confirm:$false -DriveLetter $partition.DriveLetter -Force
するとディスクがマウントされているかと思うので、ドライブレターを確認しながら
適当な名前のファイルを作成します
※itunesは新たに作成しています。
続いて⑥で作成したパッケージを⑤でダウンロードしてきたmsixmgrのX64内に配置します
.\msixmgr.exe -Unpack -packagePath “<パッケージ名>.msix” -destination “E:\<作成したフォルダ名>” -applyacls
最後にマウントを解除して準備完了です。
下記スクリプトをPowerShellで実施してください。
$vhdObject = Dismount-VHD “C:\temp\$vhdname.vhdx“ -Passthru
⑧:VHDおよび証明書の格納
①~⑦の手順で作成したVHDおよび証明書をファイルサーバに格納します。
このファイルサーバはセッションホストからもアクセスできるように設定してください
セッションホストでの準備
セッションホスト側ではアプリの認証用の証明書インストールを行います。
先ほど作業マシン作業の⑧で格納したセキュリティ証明書を信頼されたユーザーにて登録します
この時設定はローカルマシンに対して行ってください
AVDでMSIX登録をする
ホストプールのリソース画面から
MSIXアプリを選択し、追加より
イメージパスにvhdが格納されているパスを入れ、
表示名を入力した後、状態をアクティブにして追加を選択します。
登録すると一覧に表示されます。
ここまで来たらセッションホストに入ってアプリを確認できます。
また、workspaceでアプリを見れるようにアプリケーショングループに追加します
(ここは必須ではありません。)
アプリケーショングループに登録するとworkspaceでアプリが確認できます
ですが。。いざ実行すると
また、プログラムの構成を見ても”iTunes”も”Firefox”もマシン自体にインストールされていないことがわかります
まとめ
上記の手順でMSIXアプリの作成および登録ができました。
AVDのセッションホストを作成したけどアプリを追加しなくてはいけない。
もしくはアプリを頻繁に更新する際に毎回マスターイメージを作り直さないといけないといった場合には役立つ方法ですので機会があれば試してみてください。