内包型MsiからCabファイルを抽出


■内包型MsiファイルからCabファイルを抽出

前章に書いたように、内包型のMsiファイルは、SFX(自己解凍ファイル)とも考えられます。

初心者用のアーカイバはともかく、一般的なアーカイバでは、SFXであっても普通の圧縮ファイルと同じように中身のファイルを取り出す機能を持っています。そこで、Msiファイルに対しても自己解凍型のCabファイルとして中身を抽出できるのではないかと期待できます。このページでは定番ソフトの【WinRar】を使って、Msiファイルが解凍できるのかを試してみましょう。

1.まず、人気ライティングソフトの【ディスクメディエーター呉葉】のMsiファイルを対象に試してみます。

呉羽のファイルを表示 呉羽の中身を表示

試してみると、見事に中身を表示できました。もちろん抽出も可能です。自己解凍CAB書庫として正しく認識していることも表示を見るとわかります。

難点を言うと、ファイル名は本来のファイル名ではありません。暗号化されたままです。この辺はオールマイティーなアーカイバの限界です。でもファイル名を直すだけならば、リネーム機能だけを持ったソフトを作れば良いだけで、【MSI2FILE】のような抽出機能まで持つソフトは不必要であるとも言えます。

しかし残念ながら、このように上手く行く例ばかりではありません。次の例を見てください。

2.【BitDefender V8 Free版】の場合

1の時と同じように、中身のファイルを表示しようと試みましたが、文字化けした表示が出るだけです。解凍操作をしても、書庫とは判断されずに失敗します。【WinRar】の名誉のためにも言っておきますが、他のアーカイバでも同じ結果になります。

2の例のように、Msiファイルの中には普通のアーカイバでは解凍できないものが多数あります。そこで、【MSI2FILE】のように、この種のMsiファイルでも解凍できるソフトの存在意義が出てくるのです。

■【MSI2FILE】の仕様

【MSI2FILE】はMsiファイルの中に内包されるCabファイル別に、抽出フォルダを作成します。つまり12個Cabファイルがあれば、12個の抽出フォルダを作ります。

12個の内包型Cabファイル
12個の抽出フォルダ

12個のCabファイルを解凍した全ファイルをまとめて1つのフォルダの中に抽出することも技術的には可能ですが、同名ファイルが重複するケースが多発することと、経験的に、このようにするほうが抽出したファイルを利用する上で都合が良いと判断し、現在の仕様にしています。

たとえば、上図は【.NET FrameWork 多言語版】のMsiファイルの例ですが、No.3〜No.12のフォルダに抽出されたファイルは、各言語別ファイルの集まりです。

No.3 アラビア語
No.4 中国語(台湾)
No.5 ドイツ語
No.6 英語
No.7 フランス語
No.8 イタリア語
No.9 日本語
No.10 韓国語
No.11 中国語(中国)
No.12 スペイン語

日本人である我々には、No.9のフォルダの中のファイルだけを得られれば良いわけで、他の言語のフォルダは不要です。

Msiファイルが、複数のCabファイルを包含するような場合は、このように多言語版とか、NT系/9X系別とか、マルチバイト版/UNICODE版別の構成になっていたりすることが多いので、抽出フォルダもそれに伴って分けておいたほうが、抽出したファイルを利用する際に都合が良いのです。