MSIX

MSIXとは、MSIの後継となるパッケージ形式です。

制約

アプリケーションのインストール ディレクトリには書き込めません。代わりに%LOCALAPPDATA%以下などに保存します。デスクトップ アプリケーションのパッケージ化の準備 (MSIX) - MSIX | Microsoft Learn

パッケージ化の手順

プロジェクトの作成

新しいプロジェクトとして[Windows アプリケーション パッケージ プロジェクト]を追加します。そのときこれが存在しないならば、Visual Studioのインストーラから【.NET デスクトップ開発 → オプション】などにある[MSIX Packaging Tools]をインストールします。必要な Visual Studio のバージョンとワークロード - Visual Studio を使用してソース コードからデスクトップ アプリをパッケージ化する - MSIX | Microsoft Learn

プロジェクトは.wapprojファイルとして作成されますが、その実体はMSBuild プロジェクト ファイルです。

なお既定のプロジェクト名として表示される"WapProjTemplate"は、おそらく"Windows Application Packaging Project template"の意味です。Required Visual Studio version and workload - Package a desktop app from source code using Visual Studio - MSIX | Microsoft Learn

開発者モードの有効化

プロジェクトの作成時に「この種類の Windows 用アプリを開発するには、このデバイスを正しく設定する必要があります。そうでない場合は、Windows Store に提出する前にアプリをインストールしてテストすることはできません。」「デバイスで 開発者向けの設定 にアクセスし、[開発者モード] を選択します。」と表示されるならば、そのリンクから開発者モードを有効にします。そのとき「開発者モードをオンにすると、Microsoft Store 以外からアプリをインストールして実行する場合などに、デバイスと個人データがセキュリティ上のリスクにさらされる可能性や、デバイスに問題が起こる可能性があります。」と警告され、Storeに提出前のアプリをテストできるようになります。この開発者モードは、[設定]の【システム → 開発者向け】から無効できます。

プラットフォームのバージョン

サポート対象とするプラットフォームの最小バージョンは、アプリケーションが依存するAPIなどから決定します。UWP バージョンの選択 - UWP applications | Microsoft Learn

配布方法を[サイドローディング]として自動更新を有効にするならば、最小バージョンを「Windows 10, version 1803 (10.0; ビルド 17134)」以降とします。visual studio - Automatic updates are not available for the configured target platform min version - Stack Overflow

参照に追加

パッケージ プロジェクトの依存関係に、対象とするプロジェクトを追加します。

パッケージ プロジェクトのビルド

パッケージ プロジェクトをビルドし、エラーのないことを確認します。

マニフェスト ファイルの編集

パッケージ プロジェクトに含まれるマニフェスト ファイル (Package.appxmanifest) を開きます。そこではアイコンや署名を設定できます。プロジェクトを構成する - MSIX アプリのパッケージ化 - MSIX | Microsoft Learn

これらの設定はインストーラや設定アプリに作用するものであり、実行ファイルに対しては別に設定が必要です。

[アプリケーション]タブ

項目 作用
表示名 スタートメニューや、[設定]のインストールされているアプリで表示される名前
エントリ ポイント  
既定の言語  
説明  

[ビジュアル資産]タブ

アプリのアイコンなどを指定します。

[機能]タブ

ここでチェックした項目が、[機能]としてインストーラで表示されます。

[パッケージ化]タブ

項目 作用
パッケージ名 C:\Program Files\WindowsAppsにインストールされるときの、フォルダ名の先頭の文字列
パッケージ表示名 インストーラで表示される「パッケージ表示名 をインストールしますか?」のパッケージ表示名
バージョン インストーラおよび[設定]のインストールされているアプリで表示される、バージョン番号
公開者 インストーラで表示される、発行元
公開者表示名 [設定]のインストールされているアプリで表示される、発行元
パッケージ ファミリ名 %LOCALAPPDATA%\Packagesに作成されるアプリのフォルダ名
パッケージ ファミリ名

パッケージ ファミリ名は、実行時にはPackageId.FamilyNameから取得できます。 PackageId.FamilyName プロパティ (Windows.ApplicationModel) - Windows apps | Microsoft Learn c# - Is there a way to find the PackageFamilyName at runtime? - Stack Overflow

パッケージ ファミリ名 - Windows アプリのパッケージ ID の概要 - Windows apps | Microsoft Learn

アプリ パッケージの作成

ソリューション エクスプローラーでパッケージ プロジェクトのコンテキストメニューを開き、【公開 → アプリ パッケージの作成】を実行します。

配布方法

Microsoft Storeを経由せずインストールできるようにするには、配布方法を[サイドローディング (Sideloading)]とします。 基幹業務アプリのサイドロード | Microsoft Learn サイドローディング | 日経クロステック(xTECH) 井原敏宏 (2014/04/18)

そのときパッケージ プロジェクトがサポート対象とするプラットフォームの最小バージョンがビルド17134より前だと「構成されたターゲット プラットフォームの最小バージョンでは、自動更新を利用できません。(Automatic updates are not available for the configured Target Platform Minimum Version.)」として、自動更新を有効にできません。

署名方法

パッケージの構成

バージョン

新しいバージョンは、つねに大きな数字のバージョンとなるようにします。これに反するとインストール時に「このパッケージの新しいバージョンが既にインストールされています。こちらの古いパッケージを代わりにインストールするには、現在システムにあるパッケージをアンインストールしてください (0x80073D06)」としてインストールに失敗します。

[自動的に増加]をチェックするか、大きな数字のバージョン番号を付けないと、アプリを更新しても適用されません。そのときは[再インストール]を実行しても同じバージョンがインストールされるため、アンインストールしてからインストールし直します。

ただしVisual Studioでパッケージ プロジェクトを配置 (デプロイ) するときは、バージョン番号を増加させる必要はありません。

アプリ バンドル (app bundle)

アプリ バンドル (.msixbundleまたは.appxbundleファイル) を利用すると、必要なリソースのみをダウンロードさせるようにできます。アップバンドル - MSIX アプリのアプリ パッケージ要件 - Windows apps | Microsoft Learn

アーキテクチャ

アーキテクチャの[Neutral]はすべてのアーキテクチャで動作する場合に指定するもので、それ以外とは排他です。 アプリ パッケージのアーキテクチャ - MSIX | Microsoft Learn パッケージ ID のプロセッサ アーキテクチャについて - Windows アプリのパッケージ ID の概要 - Windows apps | Microsoft Learn

更新設定

[インストーラーの場所]には、オンラインで公開するならばそのURL、ローカルならばパッケージの出力場所などのパスを指定します。

作成の完了

アプリ パッケージを作成すると、パッケージの出力場所に*_TestフォルダとAPPINSTALLER ファイル (.appinstaller) が作成されます。同時に作成されるHTMLファイルの[アプリを取得する]は、このファイルへのリンクとなっています。アプリ インストーラー ファイルの概要 - MSIX | Microsoft Learn

MSIXからのインストール

ms-appinstallerプロトコルからのインストール

アプリ パッケージとして作成されたAppPackages/index.htmlを開き、そこにある[アプリを取得する]のリンクからインストールする方法です。

プロトコルが無効

このリンク先となっているms-appinstallerプロトコルからは、アプリ インストーラーが1.21.3421.0以降だと「ms-appinstaller プロトコルが無効になっています。Web リンクを更新するようにベンダーに依頼してください。詳細については、aka.ms/ms-appinstaller-disabled を参照してください。」としてインストールできません。 Microsoft、「ms-appinstaller」プロトコルハンドラーを既定で無効化 ~マルウェアの標的に - 窓の杜 樽井秀人 (2024/01/12) Why has the ms-appinstaller protocol been disabled? - Microsoft Q&A

APPINSTALLERファイルからのインストール

*.appinstallerファイルを実行してインストールする方法です。

発行元が不明

インストール画面で「このアプリ パッケージの発行元証明書を検証できませんでした。確認済みの証明書を含む新しいアプリ パッケージを取得するには、システム管理者またはアプリ開発者に問い合わせてください。アプリ パッケージ内の署名のルート証明書とすべての即時証明書を確認する必要があります (0x800B010A)」として[インストール]ボタンがグレーアウトして実行できないならば、先に証明書をインストールします。アプリ パッケージ署名エラーのトラブルシューティング方法 - Win32 apps | Microsoft Learn

証明書を用意していないならば、[アプリ パッケージの作成]のウィザード、またはPackage.appxmanifestの[パッケージ化]タブの[証明書の選択]で作成できます。

証明書をインストールするには、アプリ パッケージに含まれるセキュリティ証明書 (.cerファイル) のコンテキストメニューを開き、[証明書のインストール]を実行します。そして保存場所を[ローカル コンピューター]として、[証明書をすべて次のストアに配置する]を選択し[信頼されたユーザー]を指定します。

この証明書のインストールは、certlm.msc (コンピューター証明書の管理) からも実行できます。そこでは【証明書 → 信頼されたユーザー → 証明書】のコンテキストメニューを開き、【すべてのタスク → インポート】を選択します。そしてセキュリティ証明書 (.cerファイル) を指定し、証明書ストアが[信頼されたユーザー]であることを確認してインポートします。そのとき「ストアが読み取り専用か、ストアがいっぱいか、ストアが正しく開かなかったため、インポートができませんでした。」として失敗するならば、certlm.mscを管理者権限で実行します。信頼できる証明書 - アプリ インストーラー ファイルを使ったインストールに関する問題のトラブルシューティング - MSIX | Microsoft Learn

証明書を正しくインストールできたならば、[インストール]ボタンからインストールできます。またインストールされた証明書は、certlm.mscを実行し【証明書 → 信頼されたユーザー → 証明書】で確認や削除をできます。

ファイルの配置場所

既定ではC:\Program Files\WindowsApps\package_full_nameにインストールされ、そこに置かれたファイルは読み取り専用になります。このC:\Program Files\WindowsAppsPackageVolumeと呼ばれ、設定から変更されることがあります。インストール - Windows でパッケージ化されたデスクトップ アプリが動作するしくみについて - MSIX | Microsoft Learn

依存ファイルがパッケージ外にある場合には、それがパッケージ内のVFS (Virtual File System/仮想ファイル システム) フォルダ内に配置されます。そして例えばC:\Windows\System32\vc10.dllへのアクセスがC:\Program Files\WindowsApps\package_full_name\VFS\SystemX86\vc10.dllにリダイレクトされます。

レジストリ

レジストリ内の必要な情報は、PackageVolume以下のregistry.datに格納され参照されます。

Visual Studioでの配置

ローカルで動作確認するだけならば、Visual Studioのソリューション エクスプローラーでパッケージ プロジェクトのコンテキストメニューを開き、[配置]を実行するだけでプロジェクトのファイル以下のフォルダにファイルが作成され、システムにインストールされます。

そのとき先にMSIXでインストールしていると「アプリケーション "***" は既にこのコンピューターにインストールされています。現在の配置を続行する場合、既存のアプリケーションはアンインストールされ、アプリケーションの現在の状態は削除されます。」と警告され、逆に後からMSIXでインストールするときは「アプリをインストールできませんでした。エラー メッセージ: 現在のユーザーが、このアプリのパッケージ化されていないバージョンを既にインストールしています。これをパッケージ化されたバージョンに置き換えることはできません。競合するパッケージは ***、その発行元は CN=*** です。 (0x80073cfb)」と警告されます。

Microsoft Learnから検索