Windows FormアプリをMSIXでパッケージ化・配布する

# MSIXについて
ClickOnceに変わる新しいアプリケーション配布の仕組みとして、MSIXがあります。
既存の.NET Frameworkで作成したアプリケーションでも、Windows アプリケーション パッケージ プロジェクトをソリューションに追加するだけで、容易にMSIXでパッケージ化することができます。

Docsに詳細な記載はありますが、実際の手順について記載します。
https://docs.microsoft.com/ja-jp/windows/msix/desktop/desktop-to-uwp-packaging-dot-net

## MSIXの更新の仕組み
MSIXの更新の仕組みは、ClickOnceのように「毎回起動時に更新」ではありません。
AppX Deployment Service (AppXSVC)という、Microsoft Store アプリケーションを展開するためのサービスが不定期にチェックをかけてバックグラウンドで更新するため、更新の処理が一定以上進むまでは更新前のバージョンでアプリケーションが起動します。
従って、更新版をリリースしたのに、クライアントによっては2回くらい再起動しないと更新が反映されない事があります。
ClickOnceのようにアプリ起動時に「必ず」更新確認するやり方は別記事で紹介します。

# MSIXのパッケージ化の手順
では、実際にMSIXでパッケージ化する手順について記載します。
## プロジェクトの準備

1. 通常のWindowsフォームアプリケーションやコンソールアプリケーションのソリューションに、「Windows アプリケーション パッケージ プロジェクト」を追加します。
![Proj01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/eb7a7579-cccf-3e6b-3769-7c91df45caaa.png)

1. 追加された「Windows アプリケーション パッケージ プロジェクト」（以後、「WinAppPackagingプロジェクト」）のアプリケーションを右クリックし、「参照の追加」をクリックします。
![Proj02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/6a864c7f-df86-87a3-c285-0753f9711a37.png)

1. 既存のプロジェクトの一覧が表示されるので、パッケージに含めるプロジェクトを選択して【OK】を押下します。
![Proj03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/6feb1e5e-ff1b-f51e-ade6-b004e2f5134a.png)

1. WinAppPackagingプロジェクトのプロパティを表示すると、ターゲットとなるWindows10のバージョンを指定できます。特に変える必要も無いかと思います。
![Proj04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/5c31fa84-dc6b-5747-7eb2-9520f3186e75.png)

1. 次に、Package.appxmanifestをダブルクリックするとアプリ名等の設定ができます。
![Proj05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/950d8914-8e20-71f0-2bff-76cc009f9155.png)
![Proj06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/bbaf7b88-a7a1-edae-bb16-cb459e92767e.png)
「表示名」がスタートメニューやアプリの一覧に表示される名前です。
![Inst02_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/263e0b02-48a3-220b-e0d4-996c5927a74c.png)
「パッケージ表示名」がインストール画面に表示される名前です。
![Inst01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/f3491c85-eea4-eab8-137d-8be87fee51b6.png)



## パッケージ化
1. 次に発行です。WinAppPackagingプロジェクトを右クリックし、「公開」→「アプリパッケージの作成」を選択します。
![Pack01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/0866eaea-ea38-8e1e-10db-0283825f04c1.png)

1. 配布方法：そのままで【次へ】を押下します。
![Pack02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/1820d70e-89e5-810b-b2c6-5d5999384b8d.png)

1. 署名方法の選択：コードサイニング証明書を持っていればいずれかから選択、テスト的なものであれば【作成】を押してオレオレ証明書を作成します。
![Pack03_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/64390652-6d88-7fbe-6164-a2ba9d0cbdeb.png)

1. 証明書の準備ができたら、【次へ】を押下します。
![Pack04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/fe8a7ca9-fb03-4499-dbeb-b36cd28bd0c6.png)

1. 出力場所を確認し、【次へ】を押下します。
![Pack05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/8aaf0ea5-f82d-affd-8f9d-3ae57bf9a0d6.png)

1. インストーラを配置するURLを入力し、【作成】を押下します。
![Pack06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/fdea5583-33d9-2925-f1e8-6c45a0e303d9.png)

1. 以下の画面が表示されれば完了です。【閉じる】を押下し、「出力場所」に作成されたファイルを、「インストーラーの場所」に公開すれば他のPCからインストール可能な状態となります。
![Pack07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/64a1b106-7a9b-de79-1e0d-064f78f84716.png)


## クライアントへのインストール
1. 「インストーラーの場所」のURL（index.html）をブラウザで開き、【アプリを取得する】をクリックします。<br>
または、「ファイル名を指定して実行」で以下のようにappinstallerを実行すると直接インストーラを起動することができます。

```
ms-appinstaller:?source=https://**************/WinAppPackaging.appinstaller
```

![Inst01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/b9a53b51-e79e-04e6-c594-e26543164741.png)

1. 「アプリインストーラーを開きますか？」が表示されたら、【アプリインストーラーを開く】をクリックします。
![Inst02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/319c5fe7-5199-415e-4be0-c2aae8a0a4a5.png)

1. 「○○をインストールしますか？」で【インストール】をクリックします。
![Inst03C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/9ee7717f-b8f3-506e-a111-c836c591b555.png)

1. インストールが完了すると、アプリが起動します。
![Inst04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/f6fffa55-33e9-8ec6-74f2-371033a34968.png)

## 更新時の動き
クライアントにインストール後、新しいバージョンを「インストーラーの場所」に配置し、しばらくすると自動的に更新が走ります。
最初に記載したように、バックグラウンドで更新されるまでは古い（インストールされている）バージョンが起動します。
大体、クライアントが2回くらい再起動されないと更新されないように感じます。
更新が走った時、スタートメニューの項目の下にプログレスバーが表示されるので「更新された」というのがわかります。
![更新の瞬間.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/9435e02a-2a71-a077-ebfd-531a9478d132.gif)

また、イベントビューワーで更新のログを確認する事も出来ます。
アプリケーションとサービスログ　→　Microsoft　→　Windows　→　AppXDeployment-Server
![イベントビューアー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196121/fdf94b80-caab-9903-5e1d-0c56de203c3f.png)