2008-10-17 3 views
6

में COM पंजीकरण कैसे काम करता है मैं एक अनुप्रयोग पैकेजर हूं जो यह समझने की कोशिश कर रहा है कि COM रजिस्ट्री कुंजियां (SelfReg) Windows में दिए गए .dll से कैसे संबंधित है।विंडोज

प्रोगिड्स, एपआईडी, टाइपलिब्स, एक्सटेंशन & क्रियाएं सीएलएसआईडी के आसपास सभी बंधी हैं? क्या सीएलएसआईडी हमेशा प्रोग/ऐप आईडी का उपयोग करता है या क्या आपके पास फ़ाइल एक्सटेंशन क्लास हो सकती है? कौन सा बिट वैकल्पिक हैं?

इनमें से कुछ 'राउटर की तरह' लगता है जहां दो इंटरफेस (आंतरिक -। डीएल) और बाहरी (एक्सटेंशन इत्यादि) हैं।

यह सब कैसे फिट है? (एसडीके दस्तावेज मुझे समझ में नहीं आता है)

मैं पूछता हूं क्योंकि यह विंडोज इंस्टालर के साथ 'उपचार' के लिए सभी महत्वपूर्ण है (कौन से पैकेजर सभी 'बड़े' हैं, लेकिन इसके बाद से कोई नट-किरकिरा टूटना नहीं है एक कोडर-चीज़ वास्तव में)

--- संपादित करें: क्या मैं यह मानने में सुरक्षित हूं कि COM क्या पंजीकृत है, इसे सभी को सीएलएसआईडी से वापस लिंक करना चाहिए और यह 'मृत अंत' नहीं हो सकता है? क्रियाओं को उन एक्सटेंशन की आवश्यकता है जिन्हें प्रोजेड की आवश्यकता है ...

AppId, TypeLibs और Interfaces के बारे में क्या? वे कैसे जुड़ते हैं?

+0

मुझे आश्चर्य नहीं है कि यह पूरी तरह से निर्भर करता है कि डीएल क्या करता है, मुझे लगता है कि मुझे पता था कि इसके बारे में नियम नहीं होने जा रहे थे। –

उत्तर

4

एहसास करने वाली पहली बात यह है कि COM dlls खुद को पंजीकृत करते हैं। वे सभी आवश्यक प्रविष्टियों को रजिस्ट्री में सही स्थानों में डाल देंगे।

मुझे लगता है कि आपके केंद्रीय प्रश्न का उत्तर कौन सा बिट वैकल्पिक है, शायद यह है कि वे विभिन्न प्रकार की वस्तुओं के लिए वैकल्पिक हैं। ऑटोमेशन ऑब्जेक्ट्स को प्रोग/ऐपआईड्स की आवश्यकता होती है यदि वे सार्वजनिक रूप से रचनात्मक हैं, लेकिन हो सकता है कि वे केवल आंतरिक रूप से बनाए गए हों, समान रूप से एक गैर-सार्वजनिक रूप से रचनात्मक COM क्लास सूचीबद्ध किया जा सकता है।

कई COM ऑब्जेक्ट कि स्वचालन इंटरफेस (जैसे COM कक्षाएं माइक्रोसॉफ्ट विंडोज में आंतरिक रूप से उपयोग करता है के कई रूप में किसी भी ProgId नहीं होगा की जरूरत नहीं है, लेकिन बस HKCR \ CLSID में अपने CLSID के तहत एक प्रवेश करना होगा।

हैं मैं समझता हूँ कि आप सही तरीके से आप एक संस्थापक नजरिए से इस में रुचि रखते हैं। मैं कल्पना कर सकते हैं जो DLLs selfregistering को निर्दिष्ट करने के लिए कहें और फिर कहते हैं कि तुम सब की जरूरत है

regsvr32 dllname.dll

या

exename.exe/regserver

प्रक्रिया सर्वर की एक बाहर के लिए। अगर कुछ गलत हो जाता है तो आपको विरोधियों को कॉल करने की आवश्यकता होती है।

regsvr32/u dllname.dll

या

exename.exe/Unregserver

मुझे आशा है कि यह आपके सवाल का जवाब।

1

मैं Inside COM पुस्तक की अनुशंसा करता हूं।

यह कॉम हेयडे के दौरान भी सबसे अद्यतित संदर्भ नहीं था, लेकिन यह मूलभूत जानकारी समझाता है जिसमें सभी रजिस्ट्री goo शामिल हैं। इसके अलावा, मुझे यकीन है कि आप एक वास्तविक प्रति वास्तविक सस्ता प्राप्त कर सकते हैं।

मैं जानता हूँ कि यह एक जवाब नहीं है, लेकिन क्या रजिस्ट्री के बारे में अध्याय की तरह दिखाई देता रिमेम्बरिंग - एक गैर विशिष्ट "यह कैसे काम करता" सवाल एक बहुत, वास्तव में विस्तृत उत्तर की आवश्यकता होगी ...

0

मैंने जवाब का उपयोग किया क्योंकि टिप्पणियां इतनी सीमित लगती हैं। सुनिश्चित नहीं हैं कि इतना इस व्याख्या करेगा (? शायद मैं अपने आप से बात करने के लिए पागल समझा जाएगा)

"यह कैसे काम करता" सवाल एक सच में, सच विस्तृत उत्तर

धन्यवाद की आवश्यकता होगी - जो मैं स्वीकार करने की कोशिश कर रहा हूं वह वास्तव में डेवलपर होने के बिना इसकी समझ है - यह कारण है कि पैकेजर्स COM रजिस्ट्री कुंजियों को .dll (उसी घटक में) के साथ समूहित करने का प्रयास करते हैं ताकि एप्लिकेशन लचीलापन कार्य कर सके।

इसका मतलब यह है 'फँसाने' .dll के पंजीकरण से COM और घटक है कि .dll धारण करने के लिए सही विज्ञापन तालिकाओं (CLSID, AppID ... विज्ञापन nauseum) में संबद्ध। कभी-कभी यह देखना आसान नहीं होता है और कभी-कभी (मुझे बताया जाता है) यह ऐप को काम करने से तोड़ सकता है। मुझे बताया गया है कि COM को पूर्ण होने के लिए की आवश्यकता नहीं है (स्वयं-रेफरेंसियल)।

मैं अभी भी इसके चारों ओर अपना सिर लेने की कोशिश कर रहा हूं। बेशक, यदि पैकेजर सभी जानकारी कैप्चर करता है लेकिन COM जानकारी को .dll से संबद्ध नहीं करता है, तो regkeys अभी भी इंस्टॉल-टाइम पर लिखे गए हैं, बस एमएसआई एप्लिकेशन गलत नहीं होने पर एप्लिकेशन को बेबी-बैट नहीं करता है (जो लगभग कभी नहीं है)