特定のexe / dllが属するインストーラーパッケージを見つける方法


11

どのMSIがシステムに指定されたdllまたはexeをインストールしたかを知りたいのですが。インストールされたパッケージに属している場合、Windowsは削除されたファイルを修正することを知っています。実際にファイルを削除せずにその情報を照会できますか?ファイルがどのパッケージに属しているかをチェックするツールまたはWin32 APIはありますか?

回答:


7

どうやら方法があるように見えます!最近、次のサブツリーの下にあるWindowsインストーラーによってインストールされたファイルのレジストリエントリを発見しました。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

そこに格納されている情報を使用してファイルのインストーラーを検索する小さなPythonスクリプトを作成しました。

> python windows-installer-file-search.py opus.dll
File: C:\Program Files (x86)\Mumble\opus.dll
Product: Mumble 1.2.13
Install user: S-1-5-18
Cached installer: C:\Windows\Installer\2f6b072.msi

こちらから入手できます:https : //github.com/Zero3/windows-installer-file-search


ワオ。2.5年後、あなたはこの質問を釘付けにしました。そのサブツリーを見ると、Windowsの起動に時間がかかる理由がわかります。「アプリケーションが壊れている、ディスクを挿入する」機能がアプリケーションのすべての実行で機能するためには、これをメモリ内でインデックス付けする必要があります。
ウィッキーな2016年

6

干し草の山からもっともらしい針を見つけるだけで大​​丈夫な場合は、この7-Zipの乱暴な悪用がうまくいきます。

7z.exe l -an -air!C:\Windows\Installer\*.msi > needlelist.txt

次にneedlelist.txt、任意のテキストエディターで開いて検索するneedlename.dllと、7-Zipによって生成されたリストから対応する.msiパッケージが見つかります。

(注:このメソッドは、という名前のファイルを含む.msiパッケージを通知するだけなので、「ダーティー」ですneedlename.dll。しかし、ほとんどのユースケースではおそらく問題ありません。)


確かに、これは7-Zipの賢い乱用です。インストーラーは常にMSIをそのC:\ Windows \ Installerフォルダーにコピーしますか、それとも単に回避される可能性のある規則ですか?他に方法がないという事実を受け入れる(そしてあなたの答えを受け入れる)前に、私はまだエレガントなWin32 APIを待っています。
ウィッキー2013

AFAIK Windowsインストーラーは、インストールされたMSIを常にフォルダーにキャッシュします(superuser.com/questions/473569/…も参照)。この理由は論理的です。インストーラーはアンインストーラーでもあります。したがって、Windowsは、ユーザーがアプリケーションをアンインストールしたいときに実行するために、既知の場所にアンインストーラーのコピーを必要とします。元のMSIはおそらくこの時点でかなり前に削除されているため、Windowsはインストール中にコピーを保存します。
Zero3 2013

APIについて:ほとんどのLinuxディストリビューション(など)とは異なり、Windows(少なくともWindows 8より前)には、オペレーティングシステムに組み込まれている適切なパッケージ管理システムがなく、このようなことを照会できません。インストールされているすべてのMSIを実行してこれを実行するアプリケーションを作成し、それらの内部でターゲットファイルを検索することもできます(基本的に、私の回答は適切に実装されています)。もちろん、私は間違っているかもしれません。
Zero3 2013

まあ、私はそれを答えとして受け入れます。Win32 APIがないことを証明することはできませんが、MSIは適切なパブリックAPIなしでプロセスのロードに何らかの形でフックしていると感じました。
13
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.