AVDのオプションが拡張されてきたのでMSIXを試してみた!②

こんにちは!Azure Virtual Desktop(AVD)特集 編集部です。
今回は、MSIX App Attachについて全3回の記事となります。第2回はMSIX App Attachを実際に使ってアプリケーションを配信していきたいと思います。

MSIX App Attachに関する詳しい説明は、AVDのオプションが拡張されてきたのでMSIXを試してみた!①をご覧ください。

 

今回、検証を行うAVD環境はこちらになります。

※今回はユーザープロファイル保管用のファイルサーバを用意せず、Azure AD Connectサーバーで兼用しています。

<必要要件>

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

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

 

MSIX App Attachの流れは以下の通りです。

1.作業用VMの作成
2.自己署名証明書の作成
3.アプリケーションのMSIXパッケージ化 [.msix]
4.MSIXパッケージのMSIXイメージ化
5.セッションホストへの証明書インストール
6.ホストプールへの配信設定
7.おわりに

では早速はじめていきましょう!

 

1.作業用VMの作成・設定


【作業用VMの作成】

MSIXパッケージを作成するための作業用VMが必要となります。今回はAzureリソース上に仮想マシン(VM)を作成して利用します。

 

<MSIXパッケージ作成環境>

・Windows 10 1709 以降 ※配信するセッションホストと同じOSバージョンを推奨 詳細はこちらを参照
・OSが素の状態であること
・Windowsのアップデートを停止していること
・インストール済みアプリケーションのパッケージ化は、事前にアンイストールを行うこと
・Hyper-Vが必要(VHDXファイルを扱うため)

 

【作業用VMの設定】

作業用VMで、Powershellを起動します。
下記コマンドを入力して、各種自動アップデートを停止します。

更新プログラムの自動ダウンロードおよび自動インストールをオフにする。

reg add HKLM\Software\Policies\Microsoft\WindowsStore /v AutoDownload /t REG_DWORD /d 0 /f

Schtasks /Change /Tn “\Microsoft\Windows\WindowsUpdate\Scheduled Start” /Disable

注: 「””」が全角表示の場合、エラーが表示されるため必ず半角で入力してください。

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

Hyper-Vを有効化します。(再起動あり) 
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

作業用VMの事前設定は完了です。

 

 

2.証明書の作成(今回は自己署名)


作業用VMでおこないます。

管理者モードでPowershellを起動し、下記コマンドを入力します。

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}”)

注: 「””」が全角表示の場合、エラーが表示されるため必ず半角で入力してください。

※<証明書名>は変更する。
※証明書の番号(Thumbprint)は控えておく。

証明書が作成されていることを確認します。


【証明書の出力】

証明書のパスワードを入力する。

赤字部分に任意のパスワードを入力します。
$password = ConvertTo-SecureString -String “<パスワード>” -Force -AsPlainText

先ほど作成した証明書番号と証明書名を入力します。
※MSIXパッケージインストール用
Export-PfxCertificate -cert “Cert:\CurrentUser\My\<証明書番号>” -FilePath “C:\<証明書名>.pfx” -Password $password

※セッションホストインストール用
Export-Certificate -cert “Cert:\CurrentUser\My\<証明書番号>” -FilePath “C:\<証明書名>.cer”

 

 

3.アプリケーションのMSIXパッケージ化

 

作業用VMでおこないます。

Microsoft Store を起動し、右上の検索欄で「MSIX Packaging Tool」を検索し、入手をクリックします。

 

インストーラーに従いMSIX Packaging Toolをインストールします。

 

MSIX Packaging Tool を起動し、「アプリケーションパッケージ」を選択します。
(英語表記の場合は「Application Package」を選択)

【環境の選択】

このコンピュータにパッケージを作成するを選択します。(英語表記の場合は「Create package on this computer」)

 

【コンピュータの準備】

「Windows Searchがアクティブ」のチェックを外します。
→「Windows Search is active」をチェックして、左下のDisabled Selectedを押下→状態をDisabled

 

【インストーラの選択】

・パッケージを作成するインストーラを選択します。([.exe][.msi]を指定。)

・署名の基本設定:「証明書(.pfx)を使用して署名する」を選択します。

・証明書を参照:2.証明書の作成で作成した「<証明書名>.pfx」を指定します。

・パスワード:先ほどの【証明書の出力】で設定したパスワード

 

【パッケージ情報】

・パッケージ名:※ユーザーには表示されません。

・パッケージの表示名:※セッションホストのスタートメニューに表示されます。

・発行元の表示名:※ユーザーに表示されます。

・バージョン:任意のバージョンを入力します。(※数字は適当でOK)

・パッケージの説明、インストール先は入力不要です。


【インストール】

・自動的にインストーラーが実行されるので、インストールします。
 パッケージ化したいアプリのインストールです。

・インストールしたアプリを実行し、必要な設定をおこないます。

・設定に再起動が必要な場合は「再起動」を実施します。

 

エントリーポイント(実行ファイル)のパスが表示されます。
表示されない場合は、手動で[.exe]のパスを指定してください。
※インストール済アプリをパッケージ化したい場合は表示されません。

 

「はい、次に進みます」を押します。 (英語表記は「Yes, move on」)

 

パッケージから除外したいアプリケーションを選択します。
※何も表示されない場合はスルーします。

 

パッケージファイルの保存場所を指定します。

 

パッケージ化されたアプリが確認できます。

 

MSIX Packaging Tool を閉じます。

 

 

4.MSIXパッケージのMSIXイメージ化 [.vhdx][.cim]

 

あらかじめテンポラリーとなるフォルダを一つ作っておきます。

 

PowerShellを起動し以下のコマンドを入力し、空のVHDを作成します。

New-VHD -SizeBytes 500MB -Path “C:\temp\vscode_1.1.1.0_x64.vhdx” -Dynamic -Confirm:$false


作成したディスクをマウントします。

$vhdObject = Mount-VHD “C:\temp\vscode_1.1.1.0_x64.vhdx” -Passthru

「ディスクの管理」を見ると、1つVHDが作成されていることを確認できます。


マウントしたVHDを初期化します。

$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

※「フォーマットしますか?」のポップアップはキャンセルします。


ディスクの中にレイヤーを1つ設ける必要があるので、フォルダー(任意の名前)を1つ作成します。

 

VHDにアプリケーションを展開する必要があるので、そのためのツール「msixmgr」を下記からダウンロードします。
https://docs.microsoft.com/ja-jp/azure/virtual-desktop/app-attach-msixmgr

 

msixmgr.exeと同じレイヤーに対して、さきほどパッケージングしたアプリケーションを配置します。

 

パッケージ化したアプリを、さきほどのVHDに対して展開していきます。

.\msixmgr.exe -Unpack -packagePath “vscode_1.1.1.0_x64__1j6a6wvwh5sr0.msix” -destination “E:\vscode” -applyacls

 

中身を見て、作成されたことを確認します。

 

マウントしているディスクをアンマウントします。

$vhdObject = Dismount-VHD C:\temp\vscode_1.1.1.0_x64.vhdx -Passthru

 

作成したディスクをファイルサーバーに配置します。



※各コマンドでエラーが出た場合は、Microsoft公式サイトを参考にしてください。
https://docs.microsoft.com/ja-jp/windows/msix/msix-core/msixcore-troubleshoot

 

作業用VMでの作業は以上です。

 


5.セッションホストへの証明書インストール

 

事前に作成した証明書[.cer]をセッションホストにコピーします。(コピー&ペースト)


証明書をインストールします。

 

保管場所は「ローカルコンピュータ」を選択し、管理者権限で「次へ」を実行します。

 

「証明書をすべて次のストアに配置する」→証明書ストアの選択(インストールする場所)→「信頼されたユーザー」を選択します。

 

インストールが完了したら、「正しくインポートされました」のポップアップが出ます。


証明書がインストールされたことを確認します。

 

セッションホスト側のインストールは終了です。

 

6.ホストプールへの配信設定


Azure Portalでの作業です。

事前に用意したホストプールに対して設定を行います。

メニューから「MSIXパッケージ」を選択し、追加を押します。

 

【MSIXパッケージの追加】

MSIXイメージパス:ファイルサーバーのパスを指定します。
MSIXパッケージ:作成したパッケージを選択
パッケージアプリケーション:自動入力
表示名:任意(入力しなくてもよい)
登録の種類:「オンデマンド」を選択します。
状態:「アクティブ」を選択します。

入力して、「追加」を押します。

※正しいイメージパスを入力しても、エラー(コード:400)が出ることがあります。
 コピペではなく手打ちしたり、時間を空けて入力してみてください。


配信登録が完了しました。


次に、アプリケーショングループの設定をおこないます。


今回はデスクトップに配信するので、デスクトップのアプリケーショングループ(-DAG)を選択します。

 

メニューから「アプリケーション」を選択し、追加を押します。

 

【アプリケーションの追加】

アプリケーションソース:MSIXパッケージ
MSIXパッケージ:すでに入力されています。
アプリケーション名:Azure Portalでの表示名なので任意の名前
表示名:ユーザーに表示される名前なので、ここも任意

入力して、「保存」を押します。

 

 

Desktop Application GroupへのMSIX App Attachの配信設定が完了しました。

リモートデスクトップでセッションホストへ接続します。

 

スタートメニューを見ると、さきほどはなかったアプリケーションが表示されていることを確認できます。

 

アプリケーションとして起動できることを確認します。

 

管理者権限でコマンドプロンプトを実行し、「diskmgmt」と入力してディスクの管理を開きます。
アプリケーション用のVHDがマウントされているのが確認できます。

 

以上で、作業手順は完了です。

 

7.おわりに

今回はMSIX  App Attachを使って、セッションホストにアプリケーションの配信をおこないました。

構築していて感じたポイントは次の3つです。

①コマンド入力は慎重に
作成途中でいくつかエラーが発生したのですが、主な原因としてコマンドの文字入力の微妙な違い(半角/全角、スペース)や、一回でうまくいかないことが挙げられます。この点は改善の余地ありだと思いました。

②配信設定自体は簡単
実際、作業は特に難しい部分もなく私のようなIT初心者でも簡単におこなうことができました。
アプリケーションをディスク化してマウントするというMSIX App Attachの仕組みを理解していることが大事だと思いました。

③どのアプリでもMSIX App Attach ができれば非常に便利だろうなぁ……
今回はVisual Studio Code を配信しました。アプリケーションはセッションホストでも問題なく使用することができました。では、どのアプリケーションも配信することは可能なのでしょうか……?

そこで、次回第3弾のブログでは、MSIX App Attach に関する疑問や、実際に使用していて感じたことを検証していきたいと思います!


今回のブログ作成にあたり参考にさせていただいたサイトはこちらになります。

くらう道:https://www.cloudou.net/windows-virtual-desktop/wvd030/



ご覧いただきありがとうございました!また次回お会いしましょう。