[メモ] MSIXを使って .NET Core アプリのインストーラを作る

# はじめに
Windowsアプリ用のインストーラを作ってみたいと思ったので調べました。
インストーラの形式は[MSIX](https://docs.microsoft.com/ja-jp/windows/msix/overview)にしました。理由は以下の通り。

- 無料で試せる
- 手軽に試せる
- 比較的新しい (参考：https://forest.watch.impress.co.jp/docs/news/1236354.html)

# 環境
MSIX形式のインストーラはWindows 10以外のOSでは多分作れない

```powershell
> Get-WmiObject Win32_OperatingSystem

SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 18363
RegisteredUser  : Windows ユーザー
SerialNumber    : 
Version         : 10.0.18363

> dotnet --version
3.1.401
```
  
Pro使っていますが、Community版でも問題無いはず
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/46e8eb22-0b92-dc48-bb18-ba73510b2122.png)

# インストールするアプリを作る
WPFアプリをデフォルトの設定のまま作成する
WPFアプリを選んだ理由は特にない。コンソールアプリなど その他の形式でも問題ない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/53d3cff4-b289-8cfc-be0d-406fb22b72e2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/ab7259cb-bbe5-eaf7-12e9-889b2269b1f8.png)

# インストーラ用のプロジェクトを作る
先ほど作ったWPFアプリのソリューションに新しいプロジェクトを追加する
「Windows アプリケーション パッケージプロジェクト」を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/88e1f5f0-ba8f-8760-9d7a-3b6a7be38168.png)

「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/736e34ed-c49f-ff7b-5db5-d2437a5a6a1f.png)

ターゲットバージョンの値はインストール先のOSのバージョン以上の値を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/1ca41cc2-e54a-578b-882b-eafa8d56cf06.png)

Windows 10 SDKをインストールしていないと、選択したいバージョンが表示されない
Windows 10 SDKはVisual Studio Installerからインストールできる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/12e1d2cd-92e7-533d-f5d6-5b661ad120de.png)

インストーラ用のプロジェクトが追加される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/8065ee3e-95fa-a5e1-655b-6074be6d709a.png)

# インストーラを作る
アプリケーション > 参照の追加(R)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/33bd6636-dbe6-70cc-0cc5-83cfb4eca4a7.png)

WPFアプリを選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/fa40907e-3daf-834d-cbe0-892505987ef5.png)

選んだアプリが追加されていればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/350dde5d-f12f-52da-41d2-612feeaa340a.png)

インストーラプロジェクトを右クリック > 公開 > アプリパッケージの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/78c584c0-7d82-3ce4-89d0-38d8744be72a.png)

「[サイドローディング](https://techtarget.itmedia.co.jp/tt/news/1902/20/news07.html)」をチェックした状態で「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/983cc2a0-80d4-ea54-08ac-53c66c00e099.png)

アプリに署名をするか聞かれる。今回はテスト証明書を使用してみる
「はい、証明書を選択します」> 「作成(C)」を選択したあと「発行者共通名」と「パスワード」を適当に入力して「OK」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/57c62d5a-2200-d928-391a-0f3bddb3a3a2.png)

テスト証明書の準備はこれで終わり。「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/d8f16014-cb4e-fde5-7637-e9050fcf4c9c.png)

出力場所とインストール先のアーキテクチャを選択する (WPFアプリのターゲットプラットフォームと揃える)
※自分の環境だとx64は使えなかった。(ビルドエラーになる) 検証に使っているマシンのcpuがRyzenであることが影響しているように見えるがよくわからない...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/b7c7b0e2-faab-bc00-f10c-4310199d3647.png)



「インストーラーの場所」に先ほどの出力場所と同じ値を入力し「作成」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/3546d638-1af7-adea-792a-eb377fdb3180.png)

ビルドが通るとパッケージの情報が表示される。インストーラの作成はこれで終わり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/bac7b62c-74a6-29b2-1d60-e2ebec2d82cf.png)

# 実際にインストールしてみる

インストーラーの場所を開くとフォルダ1つとファイル2が出力されている
index.htmlをブラウザで開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/05bc8351-d605-7313-22b0-009adf34f83b.png)

インストールを実行する前に証明書の登録と、インストール先のマシンでサイドローディングをできるようにする
「公開者証明書」リンクをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/496dc566-7303-95e5-c137-f11e8398558b.png)

ダウンロードした証明書をインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/16026a3b-6c58-6061-2581-1f45c46b942d.png)

「保存場所」を「ローカルコンピューター」に変更し「次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/cccc8e46-e678-13ec-73d0-7cf8e264f493.png)

「証明書をすべて次のストアに配置する」> 「信頼されたルート証明機関」>「OK」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/abe205f2-abef-e1e1-02f4-006f75abf899.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/9445ee91-abfd-93ad-c732-30f4e237b22b.png)


開発者モードを有効にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/4682622a-b1a7-4777-79f4-e3141a7dde79.png)

インストールの準備は以上。「アプリを取得する」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/496dc566-7303-95e5-c137-f11e8398558b.png)

「インストール」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/2f16c2f1-8ecd-802b-1d41-d005df22cf68.png)

インストールが完了するとアプリが起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/fb9be652-aebf-ff59-ea62-86645b7c6914.png)

# 参考
[ .NET Coreに対応したInputManで次世代のアプリ配布方法を試す（MSIX編）](https://devlog.grapecity.co.jp/entry/2020/03/25/inputman-dotnetcore-create-msix-package)
[インストーラーを理解する](https://docs.microsoft.com/ja-jp/windows/msix/packaging-tool/know-your-installer)
[Troubleshoot installation issues with the App Installer file](https://docs.microsoft.com/en-us/windows/msix/app-installer/troubleshoot-appinstaller-issues)