Windowsアプリ配布方式の選び方 - MSI/MSIX/ClickOnce/xcopy/独自更新

· 更新日: · · Windows, 配布, MSI, MSIX, ClickOnce, xcopy, updater

更新履歴(3件・最終更新 2026年08月02日)

この記事に加えた変更の記録です。アーカイブした更新前のバージョンは、DOI付きの固定URLから読めます。

記事の冒頭に「この記事の知識マップ」節を追加しました。本文で扱っている概念とその関係を、要約・図・詳細ページへのリンクにまとめたものです。本文の主張は変えていません。
外部レビュー(1283件)への対応として本文を更新しました。個々の変更内容は、この下の履歴を参照してください。
用語ミニ辞書と、配布しているExcelの中身の要約(実ファイルを開いて確認しました)を追加しました。方式を決めたあと次に何を調べるかの節を新設し、ツールを用途別に整理しました(Inno SetupはMSIを作らない点も明記)。初回導入層と継続更新層の2層モデルの図、MSIXの制約それぞれの確認先の表も追加しています。
初版公開
この記事を引用する(DOI: 10.5281/zenodo.21589710)

この記事はZenodoにアーカイブされています。常に最新版へ解決されるDOIと、いま表示している版に固定されたDOIの両方を下に示します。

小村 豪(2026)「Windowsアプリ配布方式の選び方 - MSI/MSIX/ClickOnce/xcopy/独自更新」合同会社小村ソフト. https://doi.org/10.5281/zenodo.21589710 https://staging.comcomponent.com/blog/2026/03/20/000-windows-app-deployment-msi-msix-clickonce-xcopy-custom-updater/

DOI(最新版)
10.5281/zenodo.21589710
DOI(この版)
10.5281/zenodo.21732731

日英シート付きの Excel 判断ワークシートをダウンロード

Windows アプリの配布方式を決める場面では、つい「どれが新しいか」「どれが簡単か」で話を始めがちです。 ただ、実務で本当に効くのは別の軸です。

  • 利用者単位で入れたいのか、マシン全体へ入れたいのか
  • 更新を配布基盤に任せたいのか、自前で持ちたいのか
  • サービス / ドライバ / shell extension / COM 登録のような OS 統合があるのか
  • 閉域・オフライン・USB 配布に耐える必要があるのか
  • package identity が要るのか、それとも素の Win32 として unrestricted に動かしたいのか

配布方式の選択は、インストーラ形式の好み ではなく、OS にどこまで触るか更新責任を誰が持つか の選択です。

この記事は、Windows デスクトップアプリを作っていて、配布方式をこれから決める、あるいは今の方式を見直したい 開発者と、その運用を引き取る情報システム担当者に向けて書いています。特定の言語やフレームワークは前提にしていません。英語のまま流通している用語が多い分野なので、それらは 1.1 にまとめました。冒頭のワークシートの中身は 1.2 に要約してあります。

1. まず結論

かなり雑に、でも実務で使いやすく言うとこうです。

  • マシン全体へ入れる、サービスや COM 登録、前提物の導入がある なら、まずは MSI を起点に考えます
  • Windows 10/11 前提で、clean install / clean uninstall、頻繁な更新、package identity が欲しい なら、MSIX が有力です
  • .NET の社内向けデスクトップアプリを、利用者単位で簡単に配って自動更新したい なら、ClickOnce は今でもかなり強いです
  • 置くだけで動くツール、閉域、USB 配布、管理者権限なし を優先するなら、xcopy がいちばん素直です
  • 更新 UX、チャネル、段階配信、telemetry、復旧戦略まで自分たちで握りたい なら、独自 updater です
  • ドライバが必要 なら、最初から MSIX 中心で考えないほうが安全です
  • Explorer の in-process shell extension が必要 なら、MSIX で対応可能な範囲と OS バージョン条件を先に確認します

乱暴にまとめると、こうなります。

  1. OS への登録が濃い → MSI 寄り
  2. package identity と modern packaging を取りたい → MSIX
  3. per-user の簡単配布と built-in 更新が欲しい → ClickOnce
  4. 置くだけ配布が最優先 → xcopy
  5. 更新基盤を自社で設計・運用する覚悟がある → 独自 updater

1.1 本文で出てくる用語

配布まわりは英語のまま流通している用語が多いので、先に並べておきます。

用語 日本語で言うと 意味
package identity パッケージ ID パッケージ化されたアプリに OS が与える一意な識別。これが無いと使えない Windows の機能があります
authoring インストーラの作成 MSI の中身を定義していく作業。「MSI を書く」に近い意味で使われます
custom action カスタム動作 インストーラの標準動作では足りない処理を、自前のコードで差し込む仕組み
ARP アプリの一覧 Add / Remove Programs の略。「設定」の「インストールされているアプリ」や、コントロールパネルの「プログラムと機能」に出る一覧のこと
clean install / clean uninstall きれいな導入 / 削除 入れたものが漏れなく入り、消したときに残骸が残らない状態
repair 修復 壊れた導入状態を、インストーラの仕組みで元に戻すこと
telemetry 利用状況の計測 更新の成否や利用状況を集めて把握する仕組み
per-user / per-machine 利用者単位 / マシン単位 そのユーザーだけに入れるか、全ユーザー共通で入れるか
shell extension エクスプローラー拡張 右クリックメニューやアイコン表示など、エクスプローラーへ組み込む部品
unrestricted 制限なし パッケージの制約を受けず、素の Win32 として自由にファイルやレジストリへ触れる状態
side-by-side 併存 複数のバージョンを同じマシンに同居させること
staged rollout 段階配信 新版を一度に全員へ配らず、割合を決めて少しずつ広げること

1.2 冒頭のワークシートに何が入っているか

先頭に置いた Excel ワークシートは、この記事の判断を 自分の案件に当てはめて記録するため のものです。日本語版と英語版があり、それぞれ 2 シート構成です。

Planner シート は 3 つのブロックに分かれています。

  1. 入力シート: 次の 7 項目を埋めると、第一候補と理由を書き残せる形になっています
    • 配布スコープ … per-user / per-machine / 両方 / 未定
    • OS 統合要素 … なし / サービス / ドライバ / shell extension / COM 登録 / 複数
    • package identity … 必要 / 不要 / 判断できない
    • 標準ユーザー導入要件 … 必須 / 不要 / 条件による
    • 更新頻度 … 手動または稀 / 月次 / 週次 / それ以上
    • 対象環境 … 閉域・オフライン / 管理された新しい Windows / 旧世代混在の Windows / USB・現場
    • アプリ種別メモ … 社内 .NET デスクトップ / 商用製品 / ユーティリティ / 混在
  2. 候補の見分け方: 5 方式それぞれの「まず強く見る条件」と「先に外しやすい条件」
  3. 判断の流れ: 上の項目をどの順で見て、その結果どの方式へ寄りやすいか

Reference シート は、この記事の 3 章の判断表と 4 章の比較表をそのまま持ったものです。

つまり、記事の 3 章・4 章・7 章を、案件ごとに記入できる形にしたものです。読むだけで結論が出るならダウンロードは不要です。複数案件を比べたい、社内で判断の根拠を残したい、というときに使ってください。

この記事の知識マップ

Windowsアプリの配布方式は、インストーラー形式の好みではなく、OS統合の濃さと更新責任をどちらが持つかという2つの軸で選ばれます。MSIはWindowsサービスやCOM登録、ドライバーやシェル拡張のようにOSへ深く触る導入に向く一方でpackage identityは持たず、MSIXはpackage identityを実装しclean installと更新のきれいさを提供しますが、ドライバーやシェル拡張には基本的に向きません。ClickOnceは.NETアプリをper-userで簡単に配布・自動更新できますがWindowsサービスを含む製品には向かず、xcopy配布は置くだけで動く単純さが強みの代わりにpackage identityやサービスとの相性を持ちません。独自updaterは署名検証やコード署名証明書の管理までを自前で担う代わりに、更新の自由度と閉域配布への対応力を得る選択です。

Windowsアプリ配布方式の知識マップMSI・MSIX・ClickOnce・xcopy・独自updaterがOS統合の濃さと更新責任の持ち方という2つの軸でどう使い分けられるかを示す図。推奨される対応推奨される対応推奨される対応利用する推奨される対応実装を担う用いるのは非推奨用いるのは非推奨推奨される対応前提とする前提とする推奨される対応用いるのは非推奨用いるのは非推奨推奨される対応前提とする推奨される対応MSI(Windows Installer)MSIXClickOnceWindowsサービスドライバーパッケージシェル拡張(エクスプローラー拡張)COM(コンポーネントオブジェクトモデル)閉域ネットワークpackage identityコード署名証明書.NET(Core以降)xcopy配布独自updater

図の実線は常に成り立つ関係、破線は条件付きの関係です(成立条件は詳細ページの各関係の説明に記載)。関係すべての一覧(全17件、根拠・確度つき)と主要概念の定義は知識マップ詳細ページにまとめています。データ: JSON-LD / Turtle

2. 5 つは同じ土俵ではない

ここはかなり大事です。

MSI / MSIX / ClickOnce / xcopy は、主に どう入れるか の話です。 一方で 独自 updater は、主に どう更新責任を持つか の話です。

つまり実務では、2 層に分けて考えたほうが整理しやすいです。

主な候補 決めること
初回導入 MSI / MSIX / ClickOnce / xcopy どこへ配置するか、何を登録するか、権限、アンインストール
継続更新 MSIX App Installer / ClickOnce / 手動差し替え / 独自 updater 更新確認、配信元、署名検証、rollback、チャネル、UI

図にするとこうなります。点線は「その導入方式なら、素直につながる更新手段」です。

配布したい Windows アプリまず: どう入れるか初回導入層次に: 誰が更新責任を持つか継続更新層MSIMSIXClickOncexcopyMSIX App InstallerClickOnce の built-in 更新手動差し替え独自 updater

ClickOnce と MSIX は、上の層を決めると下の層もほぼ決まります。逆に MSI と xcopy は、下の層を別途決める必要があります。「更新をどうするか」が宙に浮きやすいのは、この 2 つを選んだとき です。

なので、独自 updater は最初に選ぶものではなく、既存の配布方式で足りない更新要件があるときに追加で選ぶもの だと思ったほうがぶれません。

3. 一枚で見る判断表

まずは、いちばん使いやすい判断表を置きます。

状況 まず選ぶもの 理由
全ユーザー向けで、サービス、COM 登録、machine-wide な設定がある MSI Windows Installer の土俵に素直に乗るほうが事故が少ない
Windows 10/11 前提で、clean install / uninstall、頻繁な更新、package identity が欲しい MSIX modern packaging と update モデルに寄せやすい
.NET の社内業務アプリを per-user で簡単配布したい ClickOnce built-in の更新モデルが使いやすい
置くだけで動くツール、閉域、USB、管理者権限なし xcopy install という概念をできるだけ持ち込まない
商用製品で、更新 UX やチャネルを自分たちで握りたい 独自 updater built-in 更新より自由度が高い
ドライバが必要 MSI か専用 installer 寄り driver package は別問題で、MSIX は不向き
in-process shell extension が必要 MSI か専用 installer 寄り Windows 11 21H2 以降では MSIX で legacy context menu handler などを登録できるが、条件確認が必要

この表でいちばん大事なのは、「更新がある」だけで独自 updater に飛ばない ことです。

4. 観点別の比較

観点 MSI MSIX ClickOnce xcopy 独自 updater
per-user 導入のしやすさ
per-machine 導入のしやすさ ×
built-in 更新 ×
package identity × × × ×
サービスとの相性 × ×
ドライバとの相性 × × ×
shell extension との相性 × ×
閉域・オフライン配布
実装・運用コスト ×
更新 UX の自由度 ×

この表で見るべきなのは、何が最強か ではなく、何がいちばん摩擦が少ないか です。

5. それぞれ、どういう案件に向くか

5.1 MSI

MSI は、Windows の伝統的なデスクトップアプリを、きちんと install / uninstall / repair したい ときの基準点です。

特に向いているのは、こういう案件です。

  • 全ユーザー向けの業務アプリ
  • Windows サービスを含むアプリ
  • COM 登録、file association、machine-wide な設定を伴うアプリ
  • 既存の installer 運用がすでにある製品

MSI の強みは、「アプリを OS にどう入れたか」を Windows の流儀で表現しやすい ことです。

一方で、弱いところもはっきりしています。

  • authoring が地味に難しい
  • upgrade / patch を雑に設計すると後で苦しみやすい
  • custom action を増やすほど壊れやすい
  • 高頻度更新の製品では更新 UX が重くなりやすい

5.2 MSIX

MSIX は、modern packaging と clean update / uninstall を取りたい 選択です。package identity が必要な Windows 機能を使いたいときにも意味が大きくなります。

向いているのはこのあたりです。

  • Windows 10/11 を前提にできるデスクトップアプリ
  • 更新頻度が高めの業務アプリ
  • package identity が効く Windows 機能を使いたいアプリ
  • Intune や App Installer に寄せたい案件

MSIX の強みは、更新とアンインストールのきれいさ です。

ただし、何でも入るわけではありません。特にこの 4 点は最初に確認したほうが安全です。

  • in-process shell extension(Windows 11 21H2 以降の MSIX では legacy context menu handler などを登録できるが、マニフェスト宣言と対象 OS の確認が必要)
  • driver
  • unrestricted な古い Win32 前提
  • package identity を取りたくない構成

この 4 点は、それぞれ確認先が違います。「MSIX は無理らしい」で止めず、どの資料を見れば決着するかまで決めておくと早いです。

確認したいこと 見る資料 何が分かるか
どの Windows バージョンから使えるか Microsoft Learn の「MSIX features and supported platforms」 機能ごとの対応 OS バージョンが表になっています
in-process shell extension を登録できるか Microsoft Learn の「Support legacy context menus for packaged apps」 対応する OS バージョンと、マニフェストでの宣言方法
自分のインストーラを MSIX 化できるか Microsoft Learn の「Prepare to package a desktop application」と「Know your installer」 パッケージ化できない構成の一覧と、事前に確認すべき点
サービスを含む構成はどうなるか Microsoft Learn の「Convert an installer that includes services」 サービスを含む変換の条件と制限

いずれも 9 章の参考資料にリンクを置いてあります。判断のときは、「対応しているか」ではなく「どのバージョンから、どういう宣言をすれば対応するか」 まで見てください。ここを OS バージョン条件込みで押さえておかないと、検証機では動いたのに現場の古い Windows では入らない、という形で後から出てきます。

5.3 ClickOnce

ClickOnce は、.NET の社内向けデスクトップアプリを、per-user で、素早く、更新込みで回したい ときに今でもかなり強いです。

向いているのは、こんな場面です。

  • 社内向けの業務アプリ
  • 標準ユーザーで導入したい
  • 利用者単位での配布で十分
  • 更新 UX をそこまで作り込みたくない

逆に、OS へ深く触るタイプの製品や、複数前提物を束ねる installer 的な役割まで期待しないほうが安全です。

5.4 xcopy

xcopy は、install ではなく deploy です。レジストリ登録も、修復機能も、package identity もありません。その代わり、置くだけで済む なら最強クラスに単純です。

持ち味が出るのは、こういうツール類です。

  • 診断ツール
  • 装置設定ツール
  • ログ収集ツール
  • 現場へ USB で渡すユーティリティ
  • side-by-side で複数版を共存させたいケース

xcopy の強みは、失敗の仕方が分かりやすい ことです。フォルダごと差し替える、戻したければ前の版へ戻す、という運用がしやすいです。

ただし当然、弱い面もあります。

  • Start menu / ARP / repair
  • file association / service / shell extension / driver
  • built-in 更新

5.5 独自 updater

独自 updater は、自由度の選択 というより 責任の選択 です。

検討する価値が出るのは、こういう要件があるときです。

  • 更新頻度が高い
  • stable / beta / preview のようなチャネルを持ちたい
  • 段階配信やロールアウト率を制御したい
  • 背景ダウンロード、通知、メンテナンス時間帯を細かく制御したい
  • 更新 telemetry や crash recovery を自前で見たい

強みは大きいですが、支払うものも大きいです。

  • 署名検証
  • 配信 manifest
  • 再試行 / resume
  • proxy / firewall / 閉域対応
  • rollback
  • 壊れた更新の復旧
  • updater 自身の更新

つまり、自由度ではなく責任が増える ということです。

5.6 方式を決めたあと、次に何を調べるか

「MSI で行く」と決めても、そこから何を調べればよいか分からないと止まります。代表的な入口を並べておきます。どれも「これを使え」ではなく、その方式を選んだなら、まず名前を知っておくとよいもの です。

決めた方式 次に調べるもの 補足
MSI WiX Toolset MSI を XML で書くオープンソースのツールセット。MSI の authoring の標準的な入口です
MSI Advanced Installer、InstallShield GUI 中心の商用 MSI 作成ツール。custom action や upgrade 設計を GUI で組みたい場合
MSI でなく EXE 形式でよい Inno Setup、NSIS MSI ではなく独自形式の EXE インストーラを作るツールです。Windows Installer の土俵には乗りません
MSIX MSIX Packaging Tool、makeappx.exesigntool.exe 既存インストーラからの変換ツールと、Windows SDK のパッケージ化・署名ツール
MSIX Windows Application Packaging Project Visual Studio 側で既存プロジェクトを MSIX 化するプロジェクト種別
ClickOnce Visual Studio の発行ウィザード、mage.exe 発行と manifest の生成。更新の挙動は発行時のオプションで決めます
独自 updater Squirrel.Windows、Velopack、WinSparkle、NetSparkle 更新の骨格を用意してくれるライブラリ。採用の可否より先に、署名検証と rollback をどう扱うか で比較してください

ここで注意したいのは、ツールを選ぶことと方式を選ぶことは別 だという点です。たとえば Inno Setup は扱いやすいですが、できあがるのは MSI ではないので、Windows Installer 前提の運用、たとえばグループポリシーでのソフトウェア配布や msiexec による修復には乗りません。5.1 で MSI を選んだ理由がそこにあるなら、ツールもそれに合わせる必要があります。

6. 迷いやすい論点

6.1 package identity が要るか

もし欲しいのが package identity 前提の Windows 機能なら、MSIX の価値は一気に上がります。

逆に、

  • unrestricted な file system access
  • unrestricted な registry access
  • elevation / process model の自由度
  • 古い Win32 前提をそのまま残したい

なら、unpackaged 寄りの方式のほうが自然です。

6.2 サービス / ドライバ / shell extension があるか

この 3 つは、配布方式を一気に重くします。

  • driver: MSIX では不向き
  • in-process shell extension: MSIX では不向き
  • Windows service: MSI は自然、MSIX でも条件付きで比較対象

OS と深く結びつく要素があるほど、見た目が簡単な配布 より 正しく導入・更新・削除できるか が主題になります。

6.3 per-user か per-machine か

ここを曖昧にしたまま進めると、あとで必ず揉めます。

  • per-user に寄せたい
    • ClickOnce
    • xcopy
    • 一部の MSIX
  • per-machine に寄せたい
    • MSI
    • 条件が合えば MSIX

「管理者権限なしで入れたい」と「全ユーザーが同じ場所から使いたい」は同じではありません。

6.4 更新頻度と運用責任

更新頻度の感覚で見ると、ざっくりこうです。

  • 四半期から月次更新: MSI でも十分回る
  • 月次から週次更新: MSIX / ClickOnce がかなり楽
  • 週次から日次更新: 独自 updater を検討する理由が出る
  • 更新は手動でよい / 配置側が制御する: xcopy でも十分

配布方式は、技術選定 であると同時に 運用設計 でもあります。

6.5 閉域・オフライン配布

閉域では、きれいな auto-update より 単純さ が勝つことが多いです。

  • xcopy は強い
  • MSI も強い
  • ClickOnce も file share や removable media で使える
  • MSIX も App Installer の使い方次第で回る

ただし閉域で頻繁に更新するなら、「誰が、どこへ、新版を置き、旧版をどう残すか」まで決めないと、方式だけ選んでも運用が崩れやすいです。

7. 迷ったときに最後に見る 6 問

  1. そのアプリは current user だけでよいか、machine-wide に入れる必要があるか
  2. service / driver / shell extension / COM 登録はあるか
  3. package identity が必要な Windows 機能を使うか
  4. 標準ユーザーだけで導入したいか
  5. 更新頻度は月次か、週次か、もっと高いか
  6. 対象環境は閉域か、OS バージョンはそろっているか

この 6 問に答えるだけで、だいたい着地点が見えます。

  • 2 が「はい」 → まず MSI 側から考える
  • 3 が「はい」 → MSIX を優先検討
  • 1 が current user、4 が「はい」、かつ .NET desktop app → ClickOnce が有力
  • 4 が「はい」、2 が「いいえ」、置くだけ運用でよい → xcopy が有力
  • 5 が高く、更新 UX を製品価値として握りたい → 独自 updater を比較対象へ入れる

8. まとめ

Windows アプリの配布方式は、次の一文にかなり集約できます。

初回導入をどう成立させるか継続更新を誰が責任を持って回すか を分けて決める。

そのうえで、ざっくりした実務判断はこうです。

  • MSI: OS へ深く入れる伝統的 desktop app
  • MSIX: package identity と modern packaging / update を取りたい app
  • ClickOnce: per-user の .NET 業務アプリを簡単に配って更新したい
  • xcopy: 置くだけでよい自己完結ツール
  • 独自 updater: 更新自体を自社で設計・運用する覚悟がある製品

そして、いちばん大事なのはこれです。

  • driver / shell extension / service があるなら、配布方式は最後の見た目ではなく、OS 統合の方式から決まる
  • package identity が必要なら、MSIX の意味が大きい
  • 独自 updater は最後の切り札であって、最初の選択肢ではない
  • 閉域 では、賢さより単純さが勝つことが多い

もし迷っているなら、まずは per-user か per-machine かOS へ何を登録するか更新頻度はどのくらいか の 3 つだけでも先に固定すると、話がかなり前に進みます。

9. 参考資料

同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。

このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。

この記事は次のサービスページにつながります。近い入口からご覧ください。

よくある質問

この記事のテーマについて、相談時によくある質問をまとめています。

MSIとMSIXの違いは何ですか?
MSI は Windows の伝統的なインストーラ形式で、per-machine 導入、Windows サービス、COM 登録、shell extension のような OS へ深く触る導入と相性がよく、install / uninstall / repair を Windows の流儀で表現できます。MSIX は Windows 10/11 前提の modern packaging で、clean install / clean uninstall、頻繁な更新、package identity が強みです。一方で MSIX はドライバに不向きで、in-process shell extension は Windows 11 21H2 以降で条件付き対応、unrestricted な古い Win32 前提にも向きません。OS への登録が濃いなら MSI、package identity と更新のきれいさを取りたいなら MSIX が起点です。
MSIXとClickOnceはどちらを選ぶべきですか?
per-user の .NET 社内業務アプリを簡単に配って自動更新したいなら、ClickOnce が今でもかなり強い選択です。built-in の更新モデルが使いやすく、標準ユーザーのまま導入でき、更新 UX を作り込む必要もありません。一方、package identity が必要な Windows 機能を使いたい、clean install / uninstall を重視したい、Intune や App Installer に寄せたい場合は MSIX が有力です。どちらも OS へ深く触るタイプの製品には向かないため、サービスやドライバがあるなら MSI 側から考えます。
ClickOnceは今でも使えますか?古い技術ではないのですか?
今でも使えますし、向いている場面ではかなり強い選択肢です。.NET の社内向けデスクトップアプリを、利用者単位(per-user)で、標準ユーザー権限のまま素早く配布し、built-in の更新モデルで回したい場合に有効です。逆に、Windows サービスやドライバ、shell extension のような OS へ深く触る製品や、複数の前提物を束ねるインストーラ的な役割までは期待しないほうが安全です。更新頻度の観点では、月次から週次程度の更新であれば ClickOnce や MSIX でかなり楽に回せます。
独自updaterはどんなときに検討すべきですか?
独自 updater は最初に選ぶものではなく、既存の配布方式で足りない更新要件があるときに追加で選ぶものです。検討する価値が出るのは、更新頻度が高い、stable / beta / preview のようなチャネルを持ちたい、段階配信やロールアウト率を制御したい、更新 telemetry や crash recovery を自前で見たい、といった要件があるときです。ただし、署名検証、配信 manifest、再試行、rollback、壊れた更新の復旧、updater 自身の更新まで自分たちで設計・運用する責任を負うことになるため、自由度ではなく責任が増える選択だと考えるべきです。

著者プロフィール

記事の著者プロフィールページです。

小村 豪

合同会社小村ソフト 代表

Windows ソフト開発、技術相談、不具合調査を中心に、既存資産が残る案件や原因が見えにくい障害調査に強みがあります。

ブログ一覧に戻る