कैसे पता लगाने के लिए कि कौन सा इंस्टॉलर पैकेज दिए गए exe / dll का है


11

मैं जानना चाहूंगा कि MSI ने मेरे सिस्टम पर दिए गए dll या exe को क्या स्थापित किया है। मुझे पता है कि अगर वे एक स्थापित पैकेज से संबंधित हैं, तो विंडोज हटाई गई फ़ाइलों को ठीक करता है। क्या मैं वास्तव में फ़ाइल को हटाने के बिना उस जानकारी को क्वेरी कर सकता हूं? फ़ाइल किस पैकेज से संबंधित है, यह जांचने के लिए कोई उपकरण या Win32 API है?

जवाबों:


7

ऐसा लगता है कि सब के बाद एक रास्ता हो सकता है! मैंने हाल ही में निम्न सबट्री के तहत विंडोज इंस्टालर्स द्वारा स्थापित फाइलों के लिए रजिस्ट्री प्रविष्टियों की खोज की है:

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

मैंने वहाँ संग्रहीत जानकारी का उपयोग करके फ़ाइल के लिए इंस्टॉलर देखने के लिए एक छोटी पायथन स्क्रिप्ट लिखी है:

> 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 साल बाद आपने इस प्रश्न को रद्द कर दिया। उस सबट्री को देखते हुए, अब मुझे समझ आया कि विंडोज को बूट करने में इतना समय क्यों लगता है। यह "आपके एप्लिकेशन को भ्रष्ट है, डिस्क सम्मिलित करें" सुविधा के लिए मेमोरी में अनुक्रमित किया जाना है ताकि एप्लिकेशन के प्रत्येक निष्पादन पर काम किया जा सके।
आकर्षक

6

यदि आप केवल हिस्टैक में प्रशंसनीय सुइयों को खोजने के साथ ठीक हैं, तो 7-ज़िप का यह त्वरित और गंदा काम करेगा:

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

फिर needlelist.txtकिसी भी टेक्स्ट एडिटर में खोलें , खोजें needlename.dllऔर आपको 7-ज़िप द्वारा उत्पन्न लिस्टिंग में संबंधित .msi पैकेज मिलेगा।

(नोट: यह विधि 'गंदी' है क्योंकि यह सिर्फ आपको बताती है कि कौन से .msi संकुल में एक फ़ाइल है जिसका नाम है needlename.dll। लेकिन यह अधिकतर उपयोग के मामलों के लिए ठीक है।)


दरअसल, यह 7-जिप का एक चतुर दुरुपयोग है। क्या इंस्टॉलर हमेशा उस C: \ Windows \ Installer फ़ोल्डर में MSI की प्रतिलिपि बनाता है या यह केवल एक कन्वेंशन है जिसे दरकिनार किया जा सकता है? मैं इस तथ्य को स्वीकार करने से पहले एक सुरुचिपूर्ण Win32 एपीआई की प्रतीक्षा कर रहा हूं कि कोई दूसरा रास्ता नहीं है (और आपके उत्तर को स्वीकार करना)।
विजील

AFAIK विंडोज इंस्टॉलर हमेशा फ़ोल्डर में MSI स्थापित करता है (यह भी देखें superuser.com/questions/473569 (# ))। इसका कारण तार्किक है: इंस्टॉलर भी अनइंस्टालर है। इस प्रकार विंडोज को एक ज्ञात स्थान पर अनइंस्टालर की एक प्रति की आवश्यकता होती है ताकि उपयोगकर्ता इसे एप्लिकेशन को अनइंस्टॉल करना चाहता हो। जैसा कि मूल MSI शायद इस बिंदु पर सदियों पहले हटा दिया गया है, Windows स्थापना के दौरान एक प्रतिलिपि बचाता है।
ज़ीरो 3

एक एपीआई के बारे में: अधिकांश लिनक्स डिस्ट्रोस (और इस तरह) के विपरीत, विंडोज (विंडोज 8 से पहले, कम से कम) में ऑपरेटिंग सिस्टम में निर्मित उचित पैकेज प्रबंधन प्रणाली नहीं है, जो इस तरह की चीजों के लिए क्वेरी करने में सक्षम है। कोई संभवतः सभी स्थापित MSI के माध्यम से ऐसा करने के लिए एक एप्लिकेशन बना सकता है और लक्ष्य फ़ाइल के लिए उनके अंदर खोज कर सकता है (अनिवार्य रूप से मेरा उत्तर ठीक से लागू किया गया है), लेकिन यह आउट-ऑफ-द-बॉक्स लागू नहीं होता है। बेशक मेरे द्वारा गलती हो सकती है।
ज़ीरो 3

खैर, मैं इसे एक जवाब के रूप में स्वीकार करता हूं। यद्यपि हम यह साबित नहीं कर सकते हैं कि इसके लिए कोई Win32 API नहीं है, मेरी भावना यह थी कि MSI किसी भी तरह उचित सार्वजनिक API के बिना प्रक्रिया लोड हो रहा है।
विजील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.