मेसन Bendixen ब्लॉग लेख कि इल्या का हवाला देते से सही है: RCW, AppDomain के दायरे वाला प्रक्रिया के लिए नहीं। मैं केवल अनुमान लगा सकता हूं कि Runtime Callable Wrapper (MSDN 2.0) आलेख "आकस्मिक" बोल रहा था। यह आलेख सामान्य अर्थ में जरूरी नहीं है, क्योंकि यह केवल एक ही ऐपडोमेन का उपयोग करके निष्पादित करना सामान्य है, लेकिन यह वाक्य तकनीकी रूप से सटीक नहीं है।
अपने विशिष्ट प्रश्न के रूप में:।
"मुझे पता है कि अगर मैं जब तक यह गिनती है 0 ( रूप में सिफारिश की) तक पहुँच जाता है एक पाश में Marshal.ReleaseComObject (x) का उपयोग क्या होता है चाहते हैं विल यह अन्य एडिन से संदर्भ (उसी एप्लिकेशन प्रक्रिया में अन्य एप्लिकेशन डोमेन में चल रहा है) ?? "
इसका उत्तर इस बात पर निर्भर करता है कि आपने अपना ऐड-इन कैसे सेट अप किया है। आम तौर पर, यदि आप सावधानी बरतते हैं, तो उत्तर हाँ है, यह उसी ऐडडोमेन के भीतर से चल रहे अन्य ऐड-इन्स में संदर्भों को प्रभावित करेगा। लेकिन चूंकि आप बताते हैं कि आप एक अलग ऐपडोमेन से चल रहे हैं, तो नहीं, ऐसा नहीं होगा।
एक COM Shim Wizard Version 2.3.1 है जिसका उपयोग आप अपने ऐड-इन को अलग करने के लिए कर सकते हैं। COM शिम विज़ार्ड के लिए प्रलेखन यहां पाया जा सकता है: Isolating Microsoft Office Extensions with the COM Shim Wizard Version 2.3.1।
COM शिम विज़ार्ड एक अनुकूलित COM फ्रंट-एंड लोडर बनाने के लिए प्रतिबिंब का उपयोग करता है जो आपकी ऐड-इन असेंबली को एक अलग ऐपडोमेन में लोड करता है। यह दो मामलों में सुरक्षा बनाता है:
(1) एक अलग, अनुकूलित कॉम प्रवेश बिंदु का उपयोग करके, अपने ऐड-इन को सही ढंग से अलग माइक्रोसॉफ्ट ऑफिस से अन्य सभी ऐड-इन्स से पहचाना जाता है। अन्यथा, डिफ़ॉल्ट रूप से, सभी ऐड-इन्स एक ही डिफ़ॉल्ट mscoree.dll लोडर साझा करते हैं। एक ही लोडर साझा करने में समस्या यह है कि यदि किसी ऐड-इन में कोई क्रैश होता है, तो mscoree.dll को Microsoft Office द्वारा समस्या के स्रोत के रूप में पहचाना जाएगा और अगली बार इसे स्वचालित रूप से लोड नहीं करेगा। आप इसे मैन्युअल रूप से फिर से चालू कर सकते हैं, लेकिन अगली बार किसी अन्य के ऐड-इन में किसी समस्या के कारण आपका ऐड-इन स्वचालित रूप से लोड नहीं होगा!
(2) अपनी असेंबली को एक अलग ऐपडोमेन के भीतर लोड करके, रनटाइम कॉल करने योग्य रैपर (आरसीडब्ल्यू) अन्य ऐड-इन्स से अलग होते हैं जो एक ही प्रक्रिया में लोड होते हैं। इस मामले में, यदि आप मार्शल को कॉल करते हैं। ReleaseComObject (ऑब्जेक्ट) या मार्शल। FinalReleaseComObject (ऑब्जेक्ट) तो आप किसी और के ऐड-इन्स को प्रभावित नहीं करेंगे। सबसे महत्वपूर्ण बात यह है कि, यदि उनमें से कोई अन्य ऐड-इन्स ऐसी कॉल करता है, तो आपका ऐड-इन दूषित होने से सुरक्षित होगा। :-)
कॉम शिम जादूगर है कि वहाँ एक अलग AppDomain से बाहर काम करते हुए अतिरिक्त मार्शलिंग भूमि के ऊपर है का उपयोग करने के नकारात्मक पक्ष यह है। मुझे विश्वास नहीं है कि यह माइक्रोसॉफ्ट आउटलुक ऐड-इन के लिए ध्यान देने योग्य होना चाहिए। हालांकि, यह एक कारक हो सकता है, हालांकि, कुछ गहन दिनचर्याओं के लिए जिनके पास ऑब्जेक्ट मॉडल पर बहुत सी कॉल हैं, जैसे कभी-कभी माइक्रोसॉफ़्ट एक्सेल ऐड-इन के मामले भी हो सकते हैं।
आपने कहा है कि आप पहले से ही अपने ऐड-इन को एक अलग ऐपडोमेन से चला रहे हैं। यदि यह सत्य है, तो आप पहले से ही मार्शल से अलग हैं। ReleaseComObject (ऑब्जेक्ट) और मार्शल। FinalReleaseComObject (ऑब्जेक्ट) अन्य AppDomains के संबंध में कॉल करता है। (मैं तुम ऐसा कैसे कर रहे हैं, जिस तरह से जानने के लिए उत्सुक हूँ ... आप स्पष्ट रूप से अपने खुद के AppDomain बनाने हैं? डिफ़ॉल्ट ऐड-इन टेम्पलेट दृश्य स्टूडियो में mscoree.dll का उपयोग कर अलग AppDomain और भार में नहीं रन करता है ।)
यदि आप अपना स्वयं का ऐपडोमेन बना रहे हैं, तो आपका कोड अलग है, लेकिन इसकी पहचान अन्य ऐड-इन्स से अलग नहीं हो सकती है, हालांकि, आपका ऐड-इन अभी भी डिफ़ॉल्ट mscoree.dll लोडर साझा करेगा, आपने इसका समाधान करने के लिए कुछ अन्य साधनों का उपयोग किया।
मुझे आशा है कि इस मदद करता है ...
हम इस धारणा बनाना है, तो "उदाहरण" की परिभाषा के बारे में सवाल से चला जाता है - यानी कहना हर संदेश एक वस्तु है की सुविधा देता है - इसका मतलब यह है कि हर जोड़ने/विभिन्न का उपयोग करता है बनाता है कि COM (उदाहरण) संदेश तक पहुंचने के लिए, या एक एकल COM ऑब्जेक्ट (उदाहरण) है और सभी इसे एक्सेस कर रहे हैं? –
आउटलुक द्वारा उजागर एक संदेश वस्तु शायद साझा की गई है - एक उदाहरण। हालांकि, प्रत्येक ऐपडोमेन के पास इस उदाहरण के लिए अपना सूचक (आरसीडब्लू) है, और यह स्वयं की आंतरिक संदर्भ गणना बनाए रखता है (यदि मेसन सही है, और मुझे विश्वास है कि वह है)। –
मेसन आलेख के समय के लिए सही हो सकता है, क्योंकि 1.1 दस्तावेज़ "प्रक्रिया" नहीं कहते हैं, लेकिन 2.0 और बाद के ढांचे के दस्तावेज़ "प्रति प्रक्रिया" कहते हैं, ऐपडोमेन के अनुसार नहीं। –