Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

.MSIファイルを解凍して中のファイルを取り出す(msix編)

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2007/03/23
 
対象OS
Windows 2000
Windows XP
Windows Server 2003
.MSIファイルはWindowsアプリケーションのインストール用のイメージ・ファイル形式である。この中には実行ファイルのほか、各種リソース、レジストリ設定、インストール・スクリプトなどが含まれている。
インストールされるファイルの内容や属性などを調査するために、.MSIファイルを解凍したいことがある。
.MSIファイルを展開するにはmsix.exeというツールが利用できる。
 
解説

 .MSIファイルは、Windowsアプリケーションや修正プログラムの配布などで使用される、インストール・イメージ用のファイル形式である。この中には、.EXE実行ファイルやDLL、リソース、レジストリや各種セットアップ情報などが含まれている。このファイルはインストーラによって利用されるが、場合によっては、プログラムをインストールせずに、その内容だけを確認したいことがある。どのようなファイルがインストールされるのか調べたり、すでにインストールされているプログラム・ファイルのバージョンと比較したりするためだ。

 TIPS「.MSIファイルを解凍して内部のファイルを取り出す(msiexec編)」では、Windows Installerの管理者ポイントへのインストール機能を利用して、.MSIファイルを解凍し、中に含まれているファイルを取り出す方法を解説した。ただしこの方法では中のファイルをそのまま取り出すのではなく、インストール・ポイントにファイルを展開するので、元の状態とは少し異なっている。

 これに対し、以下のBlogページで紹介されているmsix.exeというツールを利用すると、.MSIファイルの内容を展開して、中のファイルをそのまま取り出すことができる。

 このBlogページの末尾に「Attachment(s):」という添付ファイルへのリンク項目があるので、これをクリックしてmsix2.zipというファイルをダウンロードする。これは、Visual Studio用のC++のソースコードとプロジェクト・ファイル、バイナリ・ファイルである。ダウンロードしたmsix2.zipファイルをエクスプローラで開き、releaseフォルダの中にあるMsiX.exeというファイルを取り出し、Windowsのシステム・フォルダ(デフォルトではC:\Windows\system32)もしくは、どこか適当なフォルダへコピーしておく。

操作方法

 msix.exeはコマンド・プロンプト上で利用するツールであり、次のように使う。

msix <入力ファイル名> [/out <出力先フォルダ>]  [/ext]

 <入力ファイル名>には.MSIファイル(.MSIだけでなく、.MSMや.MSP、.PCPファイルも指定可能)のファイル名を指定する。

 デフォルトでは、カレント・フォルダにファイルが展開されるが、/outオプションを使うと、指定したフォルダにファイルを展開できる。ただし指定する出力先フォルダは、すでに存在するフォルダ名でなければならない(存在していないとmsix.exeの実行は失敗する)。

 また/extオプションを指定すると、展開したファイルのタイブに応じて、適切な拡張子を追加する。.MSIファイル中のファイルには拡張子が付いていない(ことが多い)ため、拡張子なしで展開させると、後でファイルの内容を確認するのが困難になる(どのような拡張子を付けるかは、インストール・ファイル中のデータベースなどに記録されていて、正規のインストール時に自動的に補完されるため、.MSIファイル中では単なるバイナリ・データ・ファイルとして保存されている)。/extオプションを使用すると、展開結果のファイルの内容を調べ、例えば.icoや.dll、.cab、.bmpなどの拡張子を自動的に補完する。

 例えばlogparser.msiという.MSIファイルを展開するには、次のようにする。

C:\WORK>mkdir logparser  …展開先フォルダを作成しておく

C:\WORK>msix LogParser.msi /out logparser /ext  …展開する
Extracting logparser\Binary.New.ico
Extracting logparser\Binary.Up.ico
Extracting logparser\Binary.info.ico
Extracting logparser\logprsr.cab.cab
Extracting logparser\Binary.dlgbmp.bmp
Extracting logparser\Binary.bannrbmp.bmp
Extracting logparser\Binary.completi.ico
Extracting logparser\Binary.custicon.ico
…(以下省略)…

 msiexecで展開した場合と結果が異なるが、msixは単に.MSIファイルを展開して中のファイルを取り出しているだけであり、.MSIファイル内の構造をほぼそのまま反映している。これに対してmsiexecでは、後でインストールに利用するための形式で(管理者用インストール・ポイントに)展開しているので、結果が異なっている。End of Article

関連記事(Windows Server Insider)
DLL Hellを解消する新しいWindowsインストーラとアセンブリ(技術解説)
 
関連リンク
Digital Signatures in Windows Installer(Windows Installer開発者、Heath StewartのBlog)
Patch Files Extractor(Windows Installer開発者、Heath StewartのBlog)
Waiting for msiexec.exe to Finish(Windows Installer開発者、Heath StewartのBlog)
What's in a Patch(Windows Installer開発者、Heath StewartのBlog)
Inside the MSI file format(Windows Installer開発者、Rob MenschingのBlog)
 
「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間