COM पंजीकरण के लिए रजिस्ट्री के HKEY_LOCAL_MACHINE
भाग के लिए लेखन पहुंच की आवश्यकता है।
यूएसी के तहत, HKEY_LOCAL_MACHINE
तक पहुंच लिखने के लिए उन्नत व्यवस्थापक की आवश्यकता है।
एक उन्नत प्रक्रिया प्राप्त करने का सबसे आसान तरीका यह एक मैनिफेस्ट के साथ बनाना है जो 'आवश्यकता प्रशासक' पहुंच निर्दिष्ट करता है। - परियोजना गुणों के अंतर्गत देखें -> कॉन्फ़िगरेशन गुण-> लिंकर-> मैनिफेस्ट फ़ाइल-> सही सेटिंग सेट करने के लिए यूएसी निष्पादन स्तर।
इसका मतलब है कि आप शायद अपने EXE को दो भागों में विभाजित करना चाहते हैं। इनवॉकर भाग के रूप में 'सामान्य', और, जब स्वयं पंजीकरण एक आवश्यकता के रूप में पता चला है, एक उन्नत InstallMyself भाग। जब गैर उन्नत भाग पहली बार चलने वाली स्थिति का पता लगाता है, तो इसे CreateInrocall.exe भाग निष्पादित करने के लिए ShellExecute (Ex) का उपयोग करने की आवश्यकता होती है - CreateProcess का उपयोग करके या कुछ अन्य API बस अपर्याप्त विशेषाधिकार त्रुटि के साथ विफल हो जाएंगे। ShellExecute यूएसी प्रॉम्प्ट पेश करेगा।
किसी भी पंजीकरण चरण के बिना COM dll लोड करने के लिए Application Isolation का उपयोग करना संभव है।
दुर्भाग्यपूर्ण है कि कारण निर्धारित नहीं किया जा सकता है। हालांकि, यदि आप आगे शोध करने में रुचि रखते हैं, तो एक उपकरण जो बहुत मदद करेगा SysInternals से प्रोसेस मॉनीटर होगा। प्रक्रिया मॉनिटर सभी फ़ाइल, रजिस्ट्री और प्रक्रिया के लिए अन्य पहुंच को लॉग कर सकता है, जिसमें सभी सफलता और असफल कोड शामिल हैं, जिससे रिवर्स इंजीनियरिंग के गहरे माध्यमों का सहारा लेने के बिना इस तरह की समस्याओं को डीबग करना बहुत आसान हो जाता है।
स्रोत
2009-09-07 13:28:06
आपके उत्तर के लिए बहुत बहुत धन्यवाद। अफसोस की बात है, यह मेरी समस्या का समाधान नहीं करता है, क्योंकि मैं यूएसी मोड में भी नहीं चल रहा था। –
यह कॉम डीएल के साथ एक विशिष्ट मुद्दा होगा/जिसे आप पंजीकरण करने का प्रयास कर रहे हैं। कोई वास्तविक कारण नहीं है कि एक उन्नत प्रशासक खाते से सीधे पंजीकृत होने पर Vista के तहत कॉम डीएल विफल होना चाहिए। शायद regsvr32.exe DllRegisterServer को कॉल करने से पहले COM अपार्टमेंट प्रारंभ करता है? (यानी आपको CoInitialize को कॉल करने की आवश्यकता है?) यदि आपने अपना कॉम डीएल बनाया है और सीधे पंजीकरण कोड को डीबग किया है तो मुझे यकीन है कि आपको कोई समस्या नहीं दिखाई देगी। –
आप सही हैं! समस्या केवल कुछ डीएलएल के साथ होती है। जाहिर है, कोड का दिया गया टुकड़ा अधिकांश डीएलएल के लिए अच्छा काम करता है। –