से Shell32.dll को कॉल करना मेरे पास एक .NET 4.0 लाइब्रेरी है जो WTV फ़ाइलों से मेटाडेटा प्राप्त करने के लिए Shell32 और Folder.GetDetailsOf() का उपयोग करती है। मैंने इसे बिना किसी समस्या के कंसोल और विंडोज फॉर्म ऐप्स के साथ सफलतापूर्वक उपयोग किया है। लेकिन किसी कारण से, .NET 4.0 विंडोज सेवा से घटक को कॉल करते समय, शैल क्लास को शुरू करने के लिए कॉल COM COM का कारण बनता है।.NET विंडोज सेवा
कोड है कि पुस्तकालय के अंदर विफल रहता है:
Shell32.Shell खोल = नया शैल();
त्रुटि:
प्रकार 'सिस्टम .__ ComObject' की COM वस्तु कास्ट करने के लिए प्रकार इंटरफेस करने 'Shell32.Shell' में असमर्थ। यह ऑपरेशन विफल हुआ क्योंकि आईआईडी '{286E6F1B-7113-4355-9562-96B7E9D64C54}' के साथ इंटरफ़ेस के लिए COM घटक पर क्वेरी इंटरफ़ेस कॉल निम्न त्रुटि के कारण विफल रहा: ऐसा कोई इंटरफ़ेस समर्थित नहीं है (HRESULT: 0x80004002 (E_NOINTERFACE) से अपवाद) ।
मैंने अपार्टमेंट थ्रेडिंग, कॉम इंटरप्स, डायनामिक, पीआईए, आदि इत्यादि भरने को पढ़ा :) लेकिन मुझे मिले समाधानों का कोई संयोजन समस्या हल नहीं कर पाया है। यह एक और धागे से एक कॉलिंग होना चाहिए जो इंटरऑप नहीं देख सकता है। सहायता, कृपया :)
मैं अनुमति समस्या के बारे में आपसे सहमत हूं। +1 – FrostyFire
+1, लेकिन [एमएसडीएन] के अनुसार (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx), Vista और उच्चतर में सेवाएं बिल्कुल डेस्कटॉप से बातचीत नहीं कर सकती हैं (सीधे, वैसे भी)। लिंक किए गए पेज से: "** महत्वपूर्ण ** सेवाएं विंडोज विस्टा के रूप में सीधे उपयोगकर्ता के साथ बातचीत नहीं कर सकती हैं।" मुझे यकीन नहीं है कि मैं उस मामले में "डिफ़ॉल्ट रूप से" कहूंगा। :-) –
@ केनहाइट: बस विंडोज 8 की जांच की, और यह जांच बॉक्स अभी भी वहां मौजूद है। मुझे लगता है कि लॉग-इन उपयोगकर्ता से संबंधित डेस्कटॉप से बातचीत करने में सक्षम नहीं है। हालांकि, मुझे लगता है कि उस अनुमति के साथ सेवाओं को अभी भी अपना * डेस्कटॉप सत्र मिलता है। –