私のマネージャーは、msi がインストールされているマシンの構成ファイルのリストをくれました。
そして、彼は私に、それらがどのmsiから来たのかを見つけるように頼んだ. (その msi のロジックを記述する必要があるため)。
このファイルがどのmsiから来たかを見つける方法は?
orca を手動で開いて検索するのは、msi の数が多いため大変です。
他の代替アプローチはありますか?msiの作成にはWixを使用しています。
私のマネージャーは、msi がインストールされているマシンの構成ファイルのリストをくれました。
そして、彼は私に、それらがどのmsiから来たのかを見つけるように頼んだ. (その msi のロジックを記述する必要があるため)。
このファイルがどのmsiから来たかを見つける方法は?
orca を手動で開いて検索するのは、msi の数が多いため大変です。
他の代替アプローチはありますか?msiの作成にはWixを使用しています。
.config ファイルの MD5 ハッシュを取得し、一致するハッシュが見つかるまで、.msis の MsiFileHash テーブルをクエリします。
MSI がファイルをインストールしたという保証はありません。そうは言っても、私がよく使った簡単なハックの 1 つは、ms-dos findstr コマンドです。
構成ファイルがインストールされているマシンで:
CD %WINDIR%\Installer
FINDSTR -i -m dark.exe *.msi *.msi
これにより、すべての MSI ファイルで大文字と小文字を区別しない検索が行われ、文字列 dark.exe が検索されます。次に、ORCA を使用して結果の MSI を検査し、ヒットが正確かどうか、およびそれがどの製品であるかを確認します。注意: MSI 名は短い 16 進ハッシュになります。これは、元の MSI ではなく、ストリップ/キャッシュされた MSI であるためです。
マシン上でコードを実行できる場合は、Windows インストーラー API を使用するユーティリティが答えを提供します。このようなユーティリティは、VC++ で簡単に作成できます。
Windows インストーラー API の開始点はMsiEnumComponentsで、システムにインストールされているすべてのコンポーネントのコンポーネント コードを提供します。そこからMsiEnumClients
、特定のコンポーネントを含むすべての製品の製品コードが提供されます。次にMsiGetComponentPath
、コンポーネントのパスを取得するために使用できます。関心のあるパスである場合は、MsiGetProductInfoExINSTALLPROPERTY_INSTALLSOURCE
を使用して、それをインストールした製品について調べます。INSTALLPROPERTY_PACKAGENAME.
複雑に聞こえますが、そうではありません。