मैं पंजीकरण मुक्त COM सेट अप करने का प्रयास कर रहा हूं, लेकिन इसमें थोड़ी सी समस्या है कि मैं एक और COM ऑब्जेक्ट क्लाइंट हो सकता हूं।पंजीकरण नि: शुल्क कॉम और डीएल प्रकट होता है
App.exe -----> COM सर्वर/ग्राहक dll (पंजीकृत हो या नहीं) --------> COM सर्वर DLL (नहीं पंजीकृत)
मेरे सवालों का है, यह संभव है दूसरे डीएलएल (COM सर्वर/क्लाइंट डीएल) के लिए एक मैनिफेस्ट बनाने के लिए? मेरे पास निष्पादन योग्य का नियंत्रण नहीं है, लेकिन अगर मैंने किया, तो यह काम करता है अगर मैं निष्पादन योग्य के लिए क्लाइंट मैनिफेस्ट बनाता हूं और COM सर्वर dll के लिए सर्वर प्रकट होता है।
यह मध्य डीएल के लिए मैनिफेस्ट फ़ाइल है। मैंने इसे एम्बेड करने की कोशिश की और इसे बाहरी कोशिश की। अभी भी काम नहीं करता है।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="COMCliSer.dll"
version="1.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="COMSer.dll"
version="1.0.0.0"
/>
</dependentAssembly>
</dependency>
</assembly>
आगे की जांच पड़ताल पर, मैं यह सब जब तक काम करने के लिए के रूप में मध्य dll भी पंजीकरण नि: शुल्क है और exe एक आवेदन प्रकट किया है प्राप्त कर सकते हैं। जैसे ही मैं मध्य डीएलएल पंजीकृत करता हूं, और एप्लिकेशन मैनिफेस्ट ड्रॉप करता हूं (मेरे पास नियंत्रण नहीं है कि एक्सई मेरे डीएल का उपयोग करेगा), पूरी चीज काम करना बंद कर देती है।
यदि exe के पास कोई प्रकट नहीं है, तो डीएलएल के मेनिफेस्ट को ध्यान में नहीं रखा जाता है। मैं काम करने के लिए सबकुछ स्थापित करके इसे साबित कर सकता हूं। फिर असेंबली मेनिफेस्ट में गलती डालें। यह सामान्य संदेश पॉप अप करता है:
प्रक्रिया बनाने में असमर्थ: यह एप्लिकेशन प्रारंभ करने में विफल रहा है क्योंकि एप्लिकेशन कॉन्फ़िगरेशन गलत है। अनुप्रयोग पुनर्स्थापित कर इस समस्या का हल किया जा सकता है।
मैं तो आवेदन प्रकट हो जाते हैं, आवेदन भार (CoCreateInstance यद्यपि विफल रहता है क्योंकि निर्भरता को ध्यान में रखा नहीं कर रहे हैं)
क्यों आप 'comser.dll' विधानसभा बुला रहे हैं? क्या विधानसभा प्रकट जानकारी विलय हो गई है? एक वर्णनात्मक नाम के साथ असेंबली को तैनात करना बहुत आसान है उदा। "माइक्रोसॉफ्ट.VC90.CRT", जिसमें डीएल के विभिन्न नाम हैं: "msvcr90.dll"। डीएल-असेंबली से निपटने के दौरान डीबग करना मुश्किल हो जाता है क्योंकि एक मैनिफेस्ट अब दो उद्देश्यों को पूरा करता है: उपभोक्ताओं को असेंबली की सामग्री का वर्णन करने के लिए, और असेंबली में डीएल की निर्भरताओं का वर्णन करने के लिए। –
निर्दोषों की रक्षा के लिए नाम बदल दिए गए हैं! वे असली नाम नहीं हैं। ये देशी COM dlls हैं और .NET असेंबली नहीं हैं। – Steve
इसके अलावा, "काम नहीं करता" के रूप में क्या गिनती है? क्या exe और 2 डीएल लोड होता है और बस तीसरे को चालू करने में असफल रहता है, या exe, या 2 डीएल पूरी तरह से लोड करने में विफल रहता है? वास्तव में लोड करने में विफल होने के लिए चीजें प्राप्त करना एक अच्छा कदम है क्योंकि इसका मतलब है कि सिस्टम मैनिफेस्ट देख रहा है, और सिस्टम में त्रुटि, या एप्लिकेशन, कम से कम इवेंट लॉग लॉगिंग कर रहा है। यदि यह CoCreateInstance को कॉल पर असफल रहा है तो शायद यह सिर्फ मैनिफेस्ट को बिल्कुल नहीं देख सकता है। –