WindowsのMSIXをダブルクリックインストーラーEXEにするツールを作ってみました
(github.com/airtaxi)MSIXはWindowsの最新パッケージング形式です。サンドボックスベースで動作するため、レジストリやファイル関連付けのようなシステム変更が隔離され、削除すると残留物は一切残りません。MSIXBundleでx64、x86、ARM64を1つのファイルにまとめることもできます。
問題は配布です。
MSIXをストア外でインストールするには、ユーザーが開発者モードを有効にし、PowerShellを開き、証明書を信頼する必要があります。開発者にとっては当然の手順ですが、一般ユーザーにとってはすべてが障壁です。ElectronやTauriでアプリを作っても、MSIXパッケージングをサポートしていないフレームワークも多いです。
そこで作りました。__MSIX Installer Generator__は、MSIXパッケージングからダブルクリックで使えるEXEインストーラーの生成までを一括で処理するツールです。
どのように始まったか
もともとこのプロジェクトはMSIXとは関係ありませんでした。
WinUI 3で作ったアプリをストア外で配布するために、.atpという独自パッケージ形式を使うインストーラーフレームワークを作っていました。7zで圧縮してインストーラーに渡し、レジストリ登録やスタートメニューのショートカット作成をインストーラーが処理する構造でした。単純なEXEパッケージングとしては十分にうまく動作していました。
そんな中、ふと「MSIXを使えばサンドボックスまでサポートできるのだから、これでインストーラーを作ったらどうだろう?」と思いつきました。既存の.atp方式は便利ではありますが、結局はレジストリに直接書き込み、AppDataにフォルダーを作る従来型のインストール方式なので、きれいなアンインストールは保証されません。MSIXを使えば、Windowsが自動でサンドボックスに隔離し、削除時に残留物が一切残らないわけです。
そこでMSIXインストール対応を追加し始めたのですが、進めてみると、証明書の生成、マニフェスト作成、パッケージングまで、すべてをユーザーが自分で行わなければならないことが問題でした。フレームワークがMSIXパッケージングをサポートしていないケースも多いです。結局、パッケージングまで自動化するツールを作ることになり、現在はMSIXパッケージングからEXEインストーラー構成までを一括で処理する形になりました。
どんな問題を解決したかったのか
MSIXで配布しようとすると、ユーザー体験があまりに良くありませんでした。
- 「開発者モードを有効にしてください」→ ユーザーが戸惑う
- 「PowerShellを管理者権限で開いてコマンドを入力してください」→ さらに戸惑う
- 「証明書を信頼してください」→ いちばん戸惑う
インストーラーをダブルクリックすれば完了する従来のEXEインストーラーの手軽さと、MSIXのサンドボックスの利点を両方取り入れたいと思いました。
MSIX Installer Generatorが行うこと
大きく2つあります。
1. MSIXパッケージング
証明書生成、マニフェスト作成、ビルド出力のパッケージングをGUIで処理します。フレームワークがMSIXパッケージングをサポートしていなくても、ビルド出力フォルダーを指定するだけで済みます。x64、ARM64などアーキテクチャ別のフォルダーを追加すると、PEヘッダーを読み取って自動検出し、単一の.msixまたは複数アーキテクチャ対応の.msixbundleを生成します。
2. EXEインストーラー構成
作成されたMSIXを、ダブルクリック1回でインストールできるスタンドアロンEXEインストーラーに変換します。サイドローディングに必要なすべての手順(証明書のインストール、依存関係の処理など)をインストーラーが自動で処理します。ユーザーから見ると、インストーラーをダウンロードして実行するだけで終わりです。PowerShellも、開発者モードも、証明書プロンプトも出ません。
CLIツールもあります
GUIだけでなくCLIツール(aticmsixgen)もNuGetに公開してあります。CIやAI自動化ワークフローで、コマンドラインからMSIXパッケージングとEXE構成をすべて処理できます。NativeAOTでビルドしているため、ランタイム依存のない単一実行ファイルです。
dotnet tool install --global aticmsixgen
証明書生成、マニフェスト作成、MSIXパッケージング、EXE構成まで、すべてCLIから実行できます。
こんな方に向いています
- MSIXで配布したいが、サイドローディングの手順が負担に感じる方
- Electron、Tauri、WPFなど、MSIXパッケージングを標準サポートしていないフレームワークを使っている方
- x64、ARM64など複数のアーキテクチャを1つのインストーラーで配布したい方
- CIでMSIXパッケージングとEXE構成を自動化したい方
リンク
- GitHub: https://github.com/airtaxi/AT-Installer
- Microsoft Store: https://apps.microsoft.com/detail/9P5GS17TCDQX
- NuGet (CLI): https://www.nuget.org/packages/aticmsixgen
MITライセンスで、フィードバックやIssueはGitHubに残していただければ大丈夫です。日本語で書いていただいても構いません。
まだコメントはありません。