2011-04-20 13 views
5

से तत्काल होने पर उपयोग करने के लिए अपार्टमेंट स्थिति निर्दिष्ट करें। मैंने .NET में COM ऑब्जेक्ट बनाया है और इसे regsvcs का उपयोग करके पूलिंग = 1 के साथ COM + सर्वर एप्लिकेशन के रूप में पंजीकृत किया है। मैं वर्तमान में एक बग शिकार कर रहा हूं और इसलिए यह सुनिश्चित करने की आवश्यकता है कि यह COM ऑब्जेक्ट एसटीए में चल रहा है, एमटीए नहीं। मैं इसे कैसे निर्दिष्ट कर सकता हूं?
निम्न में से कोई भी मेरी मदद करेंगे:proc COM ऑब्जेक्ट

  • घटक सेवाओं में कोई सेटिंग
  • में स्नैप कोई सेटिंग/कोड टुकड़ा जो करने के लिए COM वस्तु बना देता है केवल एसटीए की अनुमति है और न दोनों
  • कोई सेटिंग/सी # फोन करने वाले की ओर है कि कॉम बताता है पर में कोड टुकड़ा + कि COM वस्तु एसटीए के साथ प्रारंभ किया जाना चाहिए

अद्यतन:
मैं मैन्युअलबदलने की कोशिश की Both से Apartment से रजिस्ट्री में 0 प्रविष्टि। यह या तो मदद नहीं की, क्योंकि जब मैं COM वस्तु का दृष्टांत करने की कोशिश, मैं एक COMException (0x80110802) और घटना दर्शक मिल का कहना है:

घटक रजिस्ट्री में निर्दिष्ट के सूत्रण मॉडल के साथ असंगत है पंजीकरण डेटाबेस। दोषपूर्ण घटक है: < MyComponent >

वहाँ किसी अन्य जगह मैं सूत्रण मॉडल को बदलने की जरूरत है? उदाहरण के लिए "पंजीकरण डेटाबेस" में? मैं इसे कहाँ पा सकता हूँ?

धन्यवाद!

उत्तर

3

ठीक है, मैं कक्षा में निम्न कोड कि COM ऑब्जेक्ट के रूप में सामने आ रहा है डाला जाता है और यह काम करने लगता है:

[ComRegisterFunction] 
private static void Register(Type registerType) 
{ 
    if (registerType != null) 
    { 
     using (RegistryKey clsidKey = Registry.ClassesRoot.OpenSubKey("CLSID")) 
     { 
      using (RegistryKey guidKey = clsidKey.OpenSubKey(registerType.GUID.ToString("B"), true)) 
      { 
       using (RegistryKey inproc = guidKey.OpenSubKey("InprocServer32", true)) 
       { 
        inproc.SetValue("ThreadingModel", "Apartment", RegistryValueKind.String); 
       } 
      } 
     } 
    } 
} 

मैं सभी, क्यों हाथ didn द्वारा ThreadingModel बदलते पर समझ में नहीं आता एक ही परिणाम उत्पन्न नहीं करते हैं, लेकिन मुझे परवाह नहीं है ...

+0

पर्याप्त नहीं है, केवल काम करता है अगर कोकलास पहले पंजीकृत था। पहले स्थान पर मूल कुंजी प्राप्त करने के लिए पंजीकरण सेवा पर विचार करें। रजिस्ट्रार टाइप करें कॉमक्यूलेंट्स()। –

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