2010-06-16 13 views
7

32-बिट और 64-बिट ओएस के लिए COM घटक पंजीकृत करने में कोई अंतर क्यों है? एक 32-बिट OS पर:RegSvr और RegServer के बीच क्या अंतर है?

RegSvr32 COM.exe 

या

RegSvr32 COM.dll 

एक 64-बिट ऑपरेटिंग सिस्टम पर:

COM.exe /RegServer 
COM.exe /RegSvr 

अलग करता है, तो क्यों/कैसे, उसी या अन्य इन कर रहे हैं?

+3

ध्यान रखें, कि regsvr32 DLL फ़ाइलों के लिए काम करता है, लेकिन exe फ़ाइलों के लिए आपको/regserver स्विच – DarkSide

+0

का उपयोग करना है, हम कैसे सत्यापित कर सकते हैं, COM घटक सफलतापूर्वक पंजीकृत है? – Ram

उत्तर

1

32- और 64-बिट रजिस्ट्री में महत्वपूर्ण अंतर हैं।

Windows 64-bit registry v.s. 32-bit registry

अधिक विशेष रूप से, आप regsvr32 साथ एक 64-बिट DLL पंजीकृत नहीं कर सकता।

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/f8898224-76ca-4047-90d3-20c63f71a2d8/

+0

उत्तर गलत और भ्रामक है। 32/64 बिट रजिस्ट्री विवरण प्रश्न से वंचित हैं। हां आप 64-बिट डीएलएल को regsvr32 के साथ पंजीकृत कर सकते हैं, इसके अलावा यह एक सीधा तरीके से किया जाता है। –

4

COM सर्वर 32- बिट 64-बिट ऑपरेटिंग सिस्टम में एक ही तरह से पंजीकृत हैं। प्रश्न स्वयं पंजीकरण से संबंधित है, COM सर्वर पंजीकृत करने का सबसे सरल तरीका - क्रमशः HKLM/HKCR रजिस्ट्री को अद्यतन करने के लिए सर्वर से पूछें।

चूंकि आप सीधे डीएलएल नहीं चला सकते हैं, तो आप एक सहायक regsvr32 एप्लिकेशन का उपयोग करते हैं। लंबी कहानी को कम करने के लिए यह लगता है कि क्या डीएलएल 32- या 64-बिट है और एप्लिकेशन के संबंधित संस्करण का उपयोग करता है। फिर यह डीएलएल लोड करता है और पंजीकरण करने के लिए नियंत्रण पास करता है।

EXE COM सर्वर सीधे चलाया जा सकता है, इसलिए यह है कि आप उन्हें/regserver या/unregserver पैरामीटर पास करते हैं।

32- और 64-बिट ऑपरेटिंग सिस्टम के लिए विधियां 32- और 64-बिट COM सर्वर के लिए मान्य हैं।

अतिरिक्त पठन - Self-Registration: सर्वर एक DLL मॉड्यूल में पैक किया जाता है

हैं, DLL कार्यों DllRegisterServer और DllUnregisterServer निर्यात करना होगा। कोई भी एप्लिकेशन जो सर्वर को खुद को पंजीकृत करने के लिए निर्देश देना चाहता है (यानी, उसके सभी सीएलएसआईडी और टाइप लाइब्रेरी आईडी) GetProcAddress फ़ंक्शन के माध्यम से DllRegisterServer को पॉइंटर प्राप्त कर सकते हैं। DllRegisterServer के भीतर, DLL सभी आवश्यक रजिस्ट्री प्रविष्टियों को बनाता है, जो सभी InprocServer32 या InprocHandler32 प्रविष्टियों के लिए DLL के सही पथ को संग्रहीत करता है।

जब कोई एप्लिकेशन सिस्टम से घटक को निकालना चाहता है, तो उसे उस घटक को DllUnregisterServer को कॉल करके अनधिकृत करना चाहिए। इस कॉल के भीतर, सर्वर वास्तव में उन प्रविष्टियों को हटा देता है जो पहले DllRegisterServer में बनाए गए थे। सर्वर को अपनी कक्षाओं के लिए सभी प्रविष्टियों को अंधाधुंध नहीं हटाया जाना चाहिए क्योंकि अन्य सॉफ़्टवेयर ने अतिरिक्त प्रविष्टियां संग्रहीत की हो सकती हैं, जैसे कि TreatAs कुंजी।

यदि सर्वर को EXE मॉड्यूल में पैक किया गया है, तो सर्वर को पंजीकृत करने के लिए इच्छित एप्लिकेशन EXE सर्वर को कमांड लाइन तर्क/RegServer या -RegServer (केस-असंवेदनशील) के साथ लॉन्च करता है। यदि एप्लिकेशन सर्वर को अपंजीकृत करना चाहता है, तो यह EXE को कमांड-लाइन तर्क/अनग्रेसर या -न्रेगसेवर के साथ लॉन्च करता है। स्व-पंजीयन EXE इन कमांड लाइन तर्कों का पता लगाता है और एक ही ऑपरेशन को आमंत्रित करता है क्योंकि डीएलएल क्रमशः DllRegisterServerand DllUnregisterServer के भीतर होगा, InPocServer32 या InprocHandler32 के बजाय LocalServer32 के तहत अपना मॉड्यूल पथ पंजीकृत कर रहा है।

संबंधित मुद्दे