MSI(Windows Installer)
type: Concept
definition: Windowsの標準インストーラーパッケージ形式。ALLUSERSプロパティなどでインストール先の範囲を選べ、machine-wide installが一般的だがユーザー単位のインストールもできる。
alternative label: Windows Installer
alternative label: MSI
recommended for: Windowsサービス
recommended for: ドライバーパッケージ
recommended for: シェル拡張(エクスプローラー拡張)
recommended for: 閉域ネットワーク

MSIX
type: Concept
definition: package identityを持つ、Windowsのモダンなアプリパッケージング形式。
implements: package identity
not recommended for: ドライバーパッケージ
requires: コード署名証明書

ClickOnce
type: Concept
definition: .NETのWindowsデスクトップアプリを、利用者単位で簡単に配り、自動更新まで含めて回すための配布技術。マニフェストを中心に配布・更新・キャッシュ管理をまとめて扱う配布モデル。
alternative label: ClickOnce配布
not recommended for: Windowsサービス

Windowsサービス
type: Concept
definition: ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。
alternative label: サービス

ドライバーパッケージ
type: Concept
definition: デバイスドライバーをシステムへ導入するためのパッケージで、通常のアプリ配布方式とは別問題として扱われる。
alternative label: デバイスドライバーの導入パッケージ

シェル拡張(エクスプローラー拡張)
type: Concept
definition: 右クリックメニューやアイコン表示など、エクスプローラーへ組み込まれる部品。
alternative label: shell extension
alternative label: in-process shell extension

COM(コンポーネントオブジェクトモデル)
type: Concept
definition: 公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
alternative label: Component Object Model

閉域ネットワーク
type: Concept
definition: インターネットに接続せずに運用する隔離されたネットワーク。
alternative label: オフライン環境
alternative label: 切断環境

package identity
type: Concept
definition: MSIXなどのパッケージが持つ、Windowsが認識する一意の識別子。名前、バージョン、アーキテクチャ、ResourceId、発行元という5つの組で構成される。
alternative label: パッケージID

コード署名証明書
type: Concept
definition: ソフトウェアの発行元を証明し、改ざんを検出するための証明書。
alternative label: Authenticode証明書

.NET(Core以降)
type: Concept
definition: .NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
alternative label: .NET Core
alternative label: モダンな.NET

xcopy配布
type: Concept
definition: レジストリ登録や修復機能、package identityを持たず、フォルダーごとファイルを配置するだけで動作させる配布方式。
alternative label: xcopyデプロイ
alternative label: xcopy
not recommended for: Windowsサービス
recommended for: 閉域ネットワーク

独自updater
type: Concept
definition: 署名検証・配信manifest・rollback・チャネル管理などを自社で設計・運用する、独自実装のソフトウェア更新の仕組み。
alternative label: 独自の更新機構
alternative label: 自前updater

subject: MSI(Windows Installer)
predicate: recommendedFor
object: Windowsサービス
description: 全ユーザー向けでWindowsサービスやmachine-wideな設定があるなら、まずMSIを起点に考えるべきというのが本記事の判断表の推奨である
evidence: windows-installer-portal
verified at: 2026-08-01
certainty: established

subject: MSI(Windows Installer)
predicate: recommendedFor
object: ドライバーパッケージ
description: ドライバーが必要な場合、本記事はMSIXではなくMSIか専用インストーラー寄りで考えるべきだとしている
evidence: windows-installer-portal
verified at: 2026-08-01
certainty: established

subject: MSI(Windows Installer)
predicate: recommendedFor
object: シェル拡張(エクスプローラー拡張)
description: in-process shell extensionが必要な場合、本記事はMSIか専用インストーラー寄りを基本線として挙げている
evidence: support-legacy-context-menus
verified at: 2026-08-01
certainty: established

subject: MSI(Windows Installer)
predicate: uses
object: COM(コンポーネントオブジェクトモデル)
description: アプリがCOMコンポーネントの登録を必要とする場合、MSIはそのCOM登録やfile association、machine-wideな設定を伴う導入に利用される。COM登録を伴わないアプリのMSIも多い
evidence: windows-installer-portal
verified at: 2026-08-01
certainty: context-dependent

subject: MSI(Windows Installer)
predicate: recommendedFor
object: 閉域ネットワーク
description: 閉域・オフライン配布の観点でMSIは比較表でも◎とされ、強い選択肢として挙げられている
evidence: windows-installer-portal
verified at: 2026-08-01
certainty: established

subject: MSIX
predicate: implements
object: package identity
description: MSIXはmodern packagingの中核としてpackage identityの実装を担う
evidence: overview
verified at: 2026-08-01
certainty: established

subject: MSIX
predicate: notRecommendedFor
object: ドライバーパッケージ
description: ドライバーとの相性は比較表で×であり、driver packageはMSIXには不向きとされている
evidence: overview
verified at: 2026-08-01
certainty: established

subject: MSIX
predicate: notRecommendedFor
object: シェル拡張(エクスプローラー拡張)
description: in-process shell extensionは基本的にMSIXでは不向きだが、Windows 11 21H2以降ならマニフェスト宣言で条件付きに対応できると本記事は注記している
evidence: support-legacy-context-menus
verified at: 2026-08-01
certainty: context-dependent

subject: MSIX
predicate: recommendedFor
object: 閉域ネットワーク
description: 閉域配布でもMSIXはApp Installerの使い方次第で回るとされている
evidence: app-installer-file-overview
verified at: 2026-08-01
certainty: context-dependent

subject: MSIX
predicate: requires
object: コード署名証明書
description: MSIXの配布ではsigntool.exeなどによる署名が前提となる
evidence: overview
verified at: 2026-08-01
certainty: established

subject: ClickOnce
predicate: requires
object: .NET(Core以降)
description: ClickOnceは.NETのWindowsデスクトップアプリをper-userで簡単に配布・自動更新するための技術である。.NET Framework時代からある技術で、.NET Framework/.NETのどちらのアプリでも発行できるため、対象は.NET全般であって.NET(Core以降)に限らない
evidence: https://learn.microsoft.com/en-us/visualstudio/deployment/clickonce-security-and-deployment
verified at: 2026-08-01
certainty: context-dependent

subject: ClickOnce
predicate: recommendedFor
object: 閉域ネットワーク
description: ClickOnceはfile shareやremovable mediaを使えば閉域配布にも使えるとされている
evidence: https://learn.microsoft.com/en-us/visualstudio/deployment/clickonce-cache-overview
verified at: 2026-08-01
certainty: context-dependent

subject: ClickOnce
predicate: notRecommendedFor
object: Windowsサービス
description: サービスとの相性は比較表で×であり、OSへ深く触るタイプの製品への利用は安全でないとされている
evidence: https://learn.microsoft.com/en-us/visualstudio/deployment/clickonce-security-and-deployment
verified at: 2026-08-01
certainty: established

subject: xcopy配布
predicate: notRecommendedFor
object: Windowsサービス
description: xcopyの弱点としてfile association・service・shell extension・driverが挙げられている
evidence: packaging
verified at: 2026-08-01
certainty: established

subject: xcopy配布
predicate: recommendedFor
object: 閉域ネットワーク
description: 閉域・USB配布・管理者権限なしを優先するならxcopyがいちばん素直だとされている
evidence: packaging
verified at: 2026-08-01
certainty: established

subject: 独自updater
predicate: requires
object: コード署名証明書
description: 独自updaterで更新の安全性を担保する設計にするなら、署名検証とそのためのコード署名証明書の運用を自分たちで設計・運用する責任を負うことになる。技術的には署名検証なしでも動作はするが、その場合は改ざんされた更新を検知できない
evidence: app-installer-file-overview
verified at: 2026-08-01
certainty: context-dependent

subject: 独自updater
predicate: recommendedFor
object: 閉域ネットワーク
description: 閉域・オフライン配布の比較表で独自updaterも◎とされている
evidence: packaging
verified at: 2026-08-01
certainty: context-dependent