मुझे कैसे पता चलेगा कि कोई DLL पंजीकृत है?


28

जब आप पुरानी मशीनों (विंडोज एक्सपी) में डीएलएल का पंजीकरण कर रहे होते हैं, तो regsrv हमेशा कहता है कि पंजीकरण पर्याप्त था। यह तब भी होता है जब उपयोगकर्ता के पास पंजीकरण की अनुमति नहीं है।

Dll के नाम के साथ, क्या कोई कमांड है जो मैं कमांड लाइन पर चला सकता हूं यह सत्यापित करने के लिए कि क्या DLL स्थापित है?

जवाबों:


22

मुझे यह लिंक मिल गया है: मैं कैसे बता सकता हूं कि क्या एक DLL पंजीकृत किया गया है? :

यह देखते हुए कि डीएलएल पंजीकरण मनमाने ढंग से संचालन को शामिल कर सकता है, यह निर्धारित करने का कोई सामान्य उद्देश्य नहीं है कि पंजीकरण डीएलएल के लिए हुआ है या नहीं।

यह निर्धारित करने के लिए कि क्या DLL पंजीकृत किया गया है, आपको डोमेन-विशिष्ट ज्ञान लाने की आवश्यकता है। यदि आप जानते हैं कि एक DLL किसी विशेष CLSID के साथ COM ऑब्जेक्ट पंजीकृत करता है, तो आप जाँच सकते हैं कि क्या CLSID वास्तव में पंजीकृत है।

ठीक है, यह असंभव है, लेकिन DLL आमतौर पर रजिस्टर में एक प्रविष्टि बनाते हुए खुद को पंजीकृत करते हैं। एक समाधान यह है:

  1. सबसे पहले आपको DLL के COM GUID को खोजना होगा। यदि आपके पास एक मशीन है जहाँ वह पहले से पंजीकृत है, तो आप कर सकते हैं:
    1. Regedit खोलें और अपने DLL फ़ाइल नाम की खोज करें
    2. यदि यह पंजीकृत है, तो आपको टाइपलेब के तहत एक कुंजी के तहत फ़ाइल नाम मिलेगा। कुंजी इस तरह दिखाई देगी: {9F3DBFEE-FD77-4774-868B-65F75E7DB7802}
  2. अब जब आप DLL GUID जानते हैं, तो आप DOS प्रॉम्प्ट में इस कमांड के साथ इसे खोज सकते हैं: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

एक बेहतर उत्तर मुझे फ़ाइल को सीधे पंजीकृत होने से पहले GUID खोजने की अनुमति देगा। यदि आप इसे सफलतापूर्वक स्थापित कर चुके हैं तो कम से कम इस तरह से आप इंस्टॉल और सत्यापित करने के लिए एक स्क्रिप्ट बना सकते हैं।


4
आपको पहले से GUID को जानने की आवश्यकता नहीं है। DLL फ़ाइल नाम के लिए रजिस्ट्री को खोजना एक सरल तरीका होगा : यदि वह नाम उन GUID कुंजियों में से किसी एक के तहत सूचीबद्ध है, तो हाँ, DLL वास्तव में पंजीकृत किया गया है।
मैसिमो

@ मासिमो: लेकिन मैं इसे कैसे खोजूंगा? किस कुंजी में? यह गलत तरीके से खोल इतिहास में प्रदर्शित कर सकते हैं (जैसे, एक व्यवस्थापक किया जा रहा बिना रजिस्टर करने की कोशिश की)
नेवेस

HKCR के तहत, जाहिर है :) या HKLM के तहत बहुत कम से कम। उपयोगकर्ता-विशिष्ट चीजें (जैसे शेल इतिहास) HKCU के अंतर्गत हैं।
मैसिमो

@ मैसिमो: यदि आप इसका उत्तर खोजने के लिए शेल कमांड के साथ यहां उत्तर देते हैं, तो मैं इसे सही उत्तर के रूप में चिह्नित करूंगा।
नेवेस

यह आपकी तरह ही है: REG QUERYDLL फ़ाइल नाम देखने के लिए उपयोग करें।
मसिमो

13

मुझे यह जाँचने की ज़रूरत है कि क्या कोई विशेष नाम वाला DLL पंजीकृत है और मैंने अपने BAT में इस कमांड का उपयोग किया है:

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING

अगर त्रुटि के साथ लेबल पर नियंत्रण भेजा जब reg queryभी कुछ नहीं मिला। आपको रजिस्ट्री के उस हिस्से को बदलने की आवश्यकता हो सकती है जहाँ आप खोज करते हैं (मेरे मामले में HKLM'..., अधिक विशिष्ट पथ तेज़, अन्यथा यह वास्तव में लंबा लगता है)।

यदि आवश्यक हो तो आउटपुट को संसाधित किया जा सकता है, प्रविष्टि के लिए GUID प्राप्त किया जा सकता है, लेकिन यह reg क्वेरी कमांड के दायरे से बाहर है।


0

कमांड लाइन से DLL के लिए रजिस्ट्री प्रविष्टियों (और वैकल्पिक रूप से COM ऑब्जेक्ट्स) को खोजने के लिए , @ virgo47 और @neves द्वारा जवाब का एक संयोजन मेरे लिए सबसे अच्छा काम किया।

  1. DLL नाम वाली रजिस्ट्री प्रविष्टियाँ प्राप्त करें। ये प्रविष्टियाँ आमतौर पर GUID का उपयोग अपनी कुंजी के रूप में करती हैं।

    reg क्वेरी HKLM \ SOFTWARE \ Classes / s / f जो भी हो

  2. (वैकल्पिक) उन COM ऑब्जेक्ट्स को खोजें जो इन GUID के लिए पंजीकृत किए गए हैं। (का उपयोग /s /f "{GUID}"करना तेजी से होना चाहिए | findstr /i "{GUID}"। और | find /i "{GUID}"एक टाइपो प्रतीत होता है (लेकिन मैं अभी तक सर्वरफॉल्ट पर टिप्पणी नहीं लिख सकता हूं)।

    reg क्वेरी HKCR \ CLSID / s / f "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.