주어진 exe / dll이 속하는 설치 관리자 패키지를 찾는 방법


11

MSI가 특정 dll 또는 exe를 시스템에 설치 한 것을 알고 싶습니다. Windows가 삭제 된 파일이 설치된 패키지에 속하는 경우 수정 된 파일임을 알고 있습니다. 실제로 파일을 삭제하지 않고 해당 정보를 쿼리 할 수 ​​있습니까? 파일이 속한 패키지를 확인하는 도구 또는 Win32 API가 있습니까?

답변:


7

결국 방법이있을 것 같습니다! 최근에 다음 하위 트리에서 Windows Installer가 설치 한 파일의 레지스트리 항목을 발견했습니다.

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를 부팅하는 데 시간이 많이 걸리는 이유를 알았습니다. "응용 프로그램이 손상되었습니다. 디스크를 삽입하십시오"기능이 응용 프로그램을 실행할 때마다 작동하려면 메모리에 색인화되어야합니다.
— wigy

6

건초 더미에서 그럴듯한 바늘을 찾아도 괜찮다면, 7-Zip 의이 빠르고 더러운 남용 은 효과가 있습니다.

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

그런 다음 needlelist.txt텍스트 편집기에서 열고 검색 needlename.dll하면 7-Zip이 생성 한 목록에서 해당 .msi 패키지를 찾을 수 있습니다.

(참고 :이 방법은 이름이 .msi 인 파일을 포함하는 .msi 패키지를 알려주기 때문에 '더러운'방법입니다 needlename.dll. 그러나 대부분의 사용 사례에 적합합니다.)


실제로 이것은 7-Zip의 현명한 남용입니다. 설치 프로그램은 항상 MSI를 해당 C : \ Windows \ Installer 폴더에 복사합니까 아니면 우회 일 수있는 규칙입니까? 나는 다른 방법이 없다는 사실을 받아들이고 대답을 받아들이 기 전에 우아한 Win32 API를 기다리고 있습니다.
— wigy

AFAIK Windows Installer는 항상 설치된 MSI를 폴더에 캐시합니다 ( superuser.com/questions/473569/… 참조 ). 그 이유는 논리적입니다. 설치 관리자는 제거 프로그램이기도합니다. 따라서 Windows는 사용자가 응용 프로그램을 제거하려고 할 때 제거하려면 알려진 위치에 제거 프로그램의 복사본이 필요합니다. 이 시점에서 원래 MSI가 몇 년 전에 삭제되었으므로 Windows는 설치 중에 사본을 저장합니다.
— Zero3

API 관련 : 대부분의 Linux 배포판 등과 같은 Windows와는 달리 Windows (최소한 Windows 8 이전)에는 운영 체제에 적절한 패키지 관리 시스템이 내장되어 있지 않으므로 이와 같은 사항을 쿼리 할 수 ​​있습니다. 설치된 모든 MSI를 실행하여 내부에서 대상 파일을 검색하여 응용 프로그램을 만들 수는 있지만 (실제로 내 대답은 올바르게 구현되었습니다), 이것은 즉시 구현되지 않은 것으로 보입니다. 물론 틀렸을 수도 있습니다.
— Zero3

글쎄, 나는 그것을 대답으로 받아들입니다. 우리는 이것에 대한 Win32 API가 없다는 것을 증명할 수는 없지만 MSI는 적절한 공용 API없이 프로세스로드에 어떻게 든 연결되어 있다고 생각했습니다.
— wigy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.