MSI ファイル形式とは?
拡張子 .msi を持つファイルは、Microsoft Windows 用のアプリケーション インストール パッケージまたはドライバー パッケージを格納します。.msi ファイルはメタデータによって定義された標準化された構造を持ち、アプリケーションのインストールに必要なすべてのリソースを含んでいます。MSI という名前は、Microsoft が Windows Installer と改称する前の旧称である Microsoft Installer に由来します。
MSI パッケージの構造
.msi パッケージは、レガシーな Office バイナリ ドキュメントで使用されていたものと同じコンテナである OLE2 Compound File Binary 形式で保存されたリレーショナル データベースです。このコンテナを共有しているため、最初の 8 つのマジック バイト (D0 CF 11 E0 A1 B1 1A E1) は .msi 固有のものではありません。この形式は、_Tables や _Columns といった内部データベース ストリームによって識別されます。各パッケージは以下のように分割されています:
- インストールされる 1 つ以上の製品
- 製品コンポーネント - インストールの最小単位(ファイル、レジストリ キー、ショートカット)
- 機能 (Features) - コンポーネントで構成されるより大きな階層構造。ユーザーはセットアップ中にオプション機能を選択できます
- コンポーネントのキー パス - コンポーネントのインストールまたはアンインストール中に検証される重要な要素
単一のインストーラーで複数の製品をバンドルできますが、製品間の依存関係をネイティブに検証することはできません。依存関係の管理は、アンインストーラー ツールまたは GUI を通じて行われます。.msi は、エンタープライズおよびレガシーな Windows ソフトウェアにおいて依然として主要なインストーラー形式です。
Windows Installer パッケージの作成と使用
.msi パッケージは、WiX Toolset、Orca (データベースの検査と編集用に Windows SDK に含まれる)、または商用のオーサリング製品などの専用ツールで作成されます。インストール プロセスは msiexec.exe によって駆動され、3 つのフェーズに分かれます:
- ユーザー インターフェイス - ユーザーがインストール オプションを設定します
- 実行 - 実際のインストール。*即時 (immediate)* または *遅延 (deferred)* モードで実行されます
- ロールバック - インストールが失敗した場合、トランザクションがロールバックされ、システムへの変更は残りません
.msi パッケージの内容は、7-Zip を使用するか、msiexec /a (管理者用インストール) を介して、インストーラーを実行せずに抽出できます。
Windows Installer のバージョン
.msi パッケージは 1999 年に Office 2000 と共に登場し (Windows Installer 1.0)、ランタイムは Windows 2000 にも組み込まれました。バージョン 5.0 は 2009 年に Windows 7 および Windows Server 2008 R2 と共に出荷されました。密接に関連する形式には、インストール済みの製品にバイナリ差分を適用する .msp (パッチ パッケージ) や、実行時にインストーラーの動作を変更する .mst トランスフォーム ファイルがあります。2018 年に導入された新しい .msix 標準は、セキュリティ、サンドボックス化、および Store での配布を改善するために、.msi、.appx、App-V、および ClickOnce テクノロジーを統合したものですが、.msi は引き続きエンタープライズや従来のデスクトップ ソフトウェアで広く展開されています。.msi 内部のペイロード ファイルは、通常、データベースに埋め込まれた .cab ストリームとして圧縮されています。
セキュリティと安全性
リスク: MEDIUMMSI は信頼できそうなインストーラーに見えるため、マルウェアの偽装に好まれます。攻撃者はトロイの木馬化した MSI (多くの場合、インストール中にコードを実行する悪意のあるカスタム アクションを含む) や偽の「ソフトウェア アップデート」を配布します。MSI は公式ベンダーのサイトからのみインストールし、署名されたパッケージを優先してください。右クリック > プロパティ > デジタル署名で発行元を確認できます。不明なソースからの署名のない MSI は危険信号です。MSI はインストーラー権限で実行されるため、悪意のあるものは管理者と同じことが何でもできてしまいます。拡張子変更や 7-Zip を使うトリックにより、実行前に内容を検査できます。
形式の詳細
概要MSI ファイルを開くプログラム
技術的詳細
詳細仕様| コンテナ形式 | OLE2 Compound File Binary (CFBF) - レガシーな .doc や .xls バイナリ Office ファイルと同じ外部構造 |
| マジック バイト (オフセット 0) | D0 CF 11 E0 A1 B1 1A E1 - 他の複合ドキュメントと共有される OLE2 シグネチャ。MSI 固有ではありません |
| MIME タイプ | application/x-msi |
| 内部データベース テーブル | File, Registry, Component, Feature, Property, CustomAction などを含む固定スキーマのリレーショナル テーブル |
| ペイロード ストレージ | データベースに埋め込まれた、または外部の .cab アーカイブとして参照される Cabinet (.cab) ストリームとして圧縮されたファイル |
| 圧縮アルゴリズム | Cabinet ストリームは LZX または MSZIP (zlib 互換) 圧縮を使用 |
| トランザクション モデル | 失敗時の完全なロールバック - シャドウコピー スクリプト メカニズムを介して、すべてのファイルおよびレジストリの変更が取り消されます |
| 実行エンジン | msiexec.exe (Windows に組み込み)。インストール: /i、削除: /x {ProductCode}、修復: /f、管理者抽出: /a |
| 権限モデル | マシンごと (昇格が必要、ALLUSERS=1) およびユーザーごと (昇格不要) のインストール モードをサポート |
| アドバタイズ インストール | COM クラスとショートカットをアドバタイズ可能 - 登録はされるが、初回使用時まで展開されない (オンデマンド インストール) |
| パッチ サポート | .msp パッチ ファイルは、特定の MSI プロダクト コードを対象としたバイナリ差分と補足テーブル データを提供 |
| トランスフォーム サポート | .mst トランスフォーム ファイルは、ベースの .msi を変更せずに、インストール時にプロパティ値やテーブル データを上書き |
| マージ モジュール | .msm マージ モジュール パッケージは、複数の .msi データベースに含めるための再利用可能なコンポーネントをカプセル化 |
| カスタム アクション | インストール前後で VBScript、JScript、DLL エントリ ポイント、または外部 EXE プロセスを実行可能 |
| アンインストール登録 | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{ProductCode} エントリを自動的に書き込み |
| ランタイム バージョン | Windows Installer 1.0 (1999) から 5.0 (2009、Windows 7 および Server 2008 R2 に同梱) |
| リリース日 | 2000 (Windows Installer 1.0, shipped with Office 2000 / Windows 2000) |
| 仕様書 | learn.microsoft.com |
MSI の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。MSI ファイルについて最初の質問をしてみましょう。