AVDでMSIXを使ってみよう

この記事は更新から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をセッションホストとして使用します。

そして今回配信するアプリは上記イメージに含まれていない”iTunes”を配信していきたいと思います。
※結論から申し上げますと”iTunesの配信は上手くいきませんでした(おそらくマルチセッションに対応していない・・?)ので手順のみ参考いただければと思います。後日”Firefox”で同様の手順から作成できています。

作業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からアプリを取得します。


⑤:msixmgr ツールのインストール
後程必要になるため以下からmsixmagrツールをダウンロードしておきます。
https://docs.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-image-prep#expand-msix
上記のページからダウンロードしてください。

⑥:アプリのパッケージ化
それでは早速パッケージ化していきます

Application Packageを選んで進みます

Create Packageを選んで進みます

必要な項目のチェックが進むと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内に配置します

msixを配置している階層まで移動した後下記のスクリプトを実行します
<パッケージ名>には上図の作成したmsixファイルの名前を
<作成したフォルダ名>にはvhdx内に作成したフォルダの名前を入れてください。
※ドライブレターを確認してください、下記コマンドは”E”にしています
.\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でアプリが確認できます

また、セッションホストに入るとアプリが入っていることが確認できます

ですが。。いざ実行すると


このように以前のバージョンをアンインストールするように求められました・・


後日同手順で実施したFirefoxは問題なく起動できたため手順は上記を参照ください

また、プログラムの構成を見ても”iTunes”も”Firefox”もマシン自体にインストールされていないことがわかります

まとめ

上記の手順でMSIXアプリの作成および登録ができました。
AVDのセッションホストを作成したけどアプリを追加しなくてはいけない。
もしくはアプリを頻繁に更新する際に毎回マスターイメージを作り直さないといけないといった場合には役立つ方法ですので機会があれば試してみてください。

いいね (この記事が参考になった人の数:5)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルクロステクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください