web-dev-qa-db-ja.com

2つ(またはそれ以上)のMSIファイルのコンテンツを比較するにはどうすればよいですか?

2つ(またはそれ以上)の "content compare" MSI filesを実行して、ファイル内で実際に何が異なるかを確認するにはどうすればよいですか役に立たない)バイナリ比較? (これは明らかに、同じファイルのコピーを扱っているかどうかだけを教えてくれます)。

2
Stein Åsmul

MSIファイル

MSIファイルにはプリミティブMSSQLデータベースCOM構造のストレージファイルに埋め込まれています(さまざまなタイプのストレージストリームを含むファイル内のファイルシステム-古いMSOffice COM/OLE形式)。

MSIからextractファイルを作成することも、実際にはMSI全体とそのすべてのストリームをdecompileすることもできます。それぞれのアプローチを以下に簡単に説明します。

逆コンパイルを使用すると、コンパイルされたカスタムアクション(通常はC/C++で記述されます)を除いて、(ほぼ)完全な透過性が可能です。管理され、コンパイルされたコード(C#)は、実際には(理論的には)逆コンパイルされる可能性があります。

ブラックボックスのカスタムアクションが実際に何をするかを(大まかに)判断するために、 再パッケージツール -インストールの前後にシステムをスキャンして変更を一覧表示する-を使用してMSIインストールをキャプチャできます-何が表示されますか起こったが、それがどのように起こったかではない。このレベルの精査を必要とする人はほとんどいません。

ファイル比較のみ

これは古いニュースですが、MSI/setup.exeに埋め込まれているファイルを比較するだけの場合は、管理インストール を使用できます。 =MSI/setup.exeに埋め込まれているファイルを抽出し、ファイル比較ツールを使用して、バージョンごとに抽出されたファイルを比較します。

  • setup.exe /a
  • msiexec.exe /a "MySetup.msi"

MSIに出力フォルダーをインタラクティブに指定できる適切なGUIがない場合は、コマンドラインから指定してみてください。

  • msiexec.exe /a "MySetup.msi" TARGETDIR="C:\MyOutputFolder

埋め込まれたMSIファイルを含むSetup.exeファイルには、さまざまな種類があります。

基本的に、管理インストールはセットアップのファイルをMSI自体に埋め込まれたCABファイルから抽出し(CABSは外部にすることもできます)、それらをneatフォルダー構造に出力しますインストール時に意図したターゲットの宛先を大まかに反映します。 MSIではいくつかの形式の圧縮が使用される場合があります -すべて管理インストールによって処理されます。 MSIファイルを解凍しないでください

最後に、Media tableは、内部CABファイルの代わりに抽出されたソースファイルを使用するように調整されます。内部CABファイルが削除されると、出力MSIが元のファイルよりもはるかに小さくなる可能性があります。重要なことに、デジタル署名はすべて削除されます

以前は、MSIファイルはCABファイルを取り除いた%SystemRoot%\Installerにキャッシュされていましたが(小さくなりました)、現在はフルサイズでキャッシュされており、ストレージ要件が大幅に増加する可能性があります。管理インストールを使用すると、このキャッシュサイズを減らすことができます(削除されたデジタル署名のペナルティがあります)。詳細はこちら: MSIがアンインストールを続行するために元の.msiファイルを必要とするのはなぜですか?

管理インストールの詳細については、こちらをご覧ください。


「MSIコンテンツ比較」

2つのMSIファイル(たとえば、パッケージのバージョン1と2)の違いをより詳細に判断したい場合は、適切なMSIファイルビューアを使用してもう少し複雑にすることができます。MSIデコンパイラ

stackoverflow.comMSIファイルの比較方法に宣伝文を書きました。 serverfault.com にあるこのコンテンツへのリンクを追加することをお勧めします。多分それはシステム管理者にとって役立つでしょう。

デュアルソースの問題を抱えたくないので、stackoverflow-versionにリンクします(それがOKの練習であることを願っています): 2つ(またはそれ以上)のコンテンツを比較するにはどうすればよいですか? )MSIファイル? この回答には、「実際の比較」を行うのに役立ついくつかのツール(無料と商用の両方)がリストされています。

WiXツールキットからのdark.exeの高度なMSI逆コンパイル機能は、特に興味深いかもしれません。リンクされたコンテンツでは、MSIファイルの逆コンパイルに加えて、 WiXツールキット (複数のMSIファイルと埋め込みEXEファイルを順番にインストールできるブートストラップ機能)で作成されたsetup.exeファイルを解凍する方法についても説明しています。 。解凍されたコンテンツは、同じdark.exeファイルで分解できます(MSIファイルの場合)。

他の展開ツールで作成されたsetup.exeファイルの処理方法 にもリンクを挿入します。

2
Stein Åsmul