1 ポイント 投稿者 kck4156 3 시간 전 | まだコメントはありません。 | WhatsAppで共有

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構成を自動化したい方

リンク

MITライセンスで、フィードバックやIssueはGitHubに残していただければ大丈夫です。日本語で書いていただいても構いません。

まだコメントはありません。

まだコメントはありません。