วิธีค้นหาแพ็คเกจตัวติดตั้งที่ได้รับ exe / dll อยู่


11

ฉันต้องการทราบว่า MSI ติดตั้ง dll หรือ exe ในระบบของฉันอย่างไร ฉันรู้ว่า Windows แก้ไขไฟล์ที่ถูกลบหากเป็นของแพ็คเกจที่ติดตั้ง ฉันสามารถสืบค้นข้อมูลนั้นโดยไม่ลบไฟล์ได้หรือไม่? มีเครื่องมือหรือ Win32 API เพื่อตรวจสอบไฟล์ที่เป็นของแพ็คเกจหรือไม่?

คำตอบ:


7

ดูเหมือนว่าอาจจะมีวิธีหลังจากทั้งหมด! ฉันเพิ่งค้นพบรายการรีจิสทรีสำหรับไฟล์ที่ติดตั้งโดย Windows Installers ภายใต้ทรีย่อยต่อไปนี้:

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และคุณจะพบแพ็คเกจ. msi ที่เกี่ยวข้องในรายการที่สร้างโดย 7-Zip

(หมายเหตุ: วิธีการนี้ 'สกปรก' เพราะเพียงบอกคุณว่าแพคเกจ. msi ที่มีไฟล์ชื่อneedlename.dllแต่อาจเป็นเรื่องที่ดีสำหรับกรณีส่วนใหญ่ที่ใช้)


อันที่จริงนี่คือการละเมิด 7-Zip อย่างชาญฉลาด โปรแกรมติดตั้งคัดลอก MSI ไปยังโฟลเดอร์ C: \ Windows \ Installer เสมอหรือเป็นเพียงข้อตกลงที่อาจหลีกเลี่ยงได้หรือไม่ ฉันยังคงรอ Win32 API ที่หรูหราก่อนที่จะยอมรับความจริงที่ว่าไม่มีวิธีอื่น (และยอมรับคำตอบของคุณ)
wigy

AFAIK Windows Installer จะแคช MSIs ที่ติดตั้งไว้ในโฟลเดอร์เสมอ (ดูที่superuser.com/questions/473569// ) เหตุผลนี้เป็นเหตุผล: ตัวติดตั้งเป็นตัวถอนการติดตั้งเช่นกัน Windows ต้องการสำเนาของตัวถอนการติดตั้งในตำแหน่งที่รู้จักเพื่อดำเนินการเมื่อผู้ใช้ต้องการถอนการติดตั้งแอปพลิเคชัน เนื่องจาก MSI ดั้งเดิมอาจถูกลบไปแล้วเมื่อหลายปีก่อน ณ จุดนี้ Windows จะบันทึกสำเนาในระหว่างการติดตั้ง
Zero3

เกี่ยวกับ API: ซึ่งแตกต่างจาก Linux distros ส่วนใหญ่ (และอื่น ๆ ), Windows (ก่อนหน้า Windows 8, อย่างน้อย) ไม่ได้มีระบบการจัดการแพคเกจที่เหมาะสมในระบบปฏิบัติการซึ่งสามารถสอบถามสิ่งนี้ได้ หนึ่งอาจสร้างแอปพลิเคชันให้ทำเช่นนี้โดยเรียกใช้ MSI ที่ติดตั้งทั้งหมดและค้นหาในไฟล์เหล่านั้นเพื่อค้นหาไฟล์เป้าหมาย (โดยพื้นฐานแล้วคำตอบของฉันถูกนำไปใช้อย่างถูกต้อง) แน่นอนฉันอาจผิด
Zero3

ฉันยอมรับมันเป็นคำตอบ แม้ว่าเราจะไม่สามารถพิสูจน์ได้ว่าไม่มี Win32 API สำหรับสิ่งนี้ความรู้สึกของฉันคือ MSI ก็ติดการโหลดกระบวนการโดยไม่ต้องใช้ API สาธารณะที่เหมาะสม
wigy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.