2010-09-08 7 views
14

मैं विजुअल स्टूडियो 2010 का उपयोग कर सी ++ में एक बेतुका सरल खोल एक्सटेंशन बनाने की कोशिश कर रहा हूं, लेकिन मुझे शुरुआती बिंदु के रूप में काम करने के लिए उदाहरण भी नहीं मिल रहे हैं।विजुअल स्टूडियो 2010 में एक विंडोज शैल एक्सटेंशन बनाना

मैं विंडोज 7 x64 का उपयोग कर रहा हूं।

मैंने this Visual Studio template की कोशिश की है, लेकिन एक बार जब मैं VS2010 में काम करने के लिए टेम्पलेट प्राप्त करता हूं, तो मेरे पास कई त्रुटियां हैं जो मुझे यकीन नहीं है कि कैसे ठीक किया जाए।

मैंने The Complete Idiot's Guide to Writing Shell Extensions की कोशिश की है, और एक बार डेमो संकलित करने के बाद सभी सही रजिस्ट्री सेटिंग्स इत्यादि बनाई जाती हैं लेकिन कोई संदर्भ मेनू प्रकट नहीं होता है।

मैं this C# COM Interop example देखा है, लेकिन मैं के रूप में है कि क्या यह this article * सी # धन्यवाद का उपयोग करने के लिए सुरक्षित है करने के लिए उलझन में छोड़ दिया गया है, लेकिन ऐसा लगता है कि अगर मैं नेट 4 उपयोग करें, क्योंकि it supports in process side-by-side CLR hosting जैसे मैं ठीक हो सकता है।

  • संक्षेप में: ऐतिहासिक रूप से .NET के दो संस्करण एक ही प्रक्रिया में नहीं चल सकते हैं, और जिस तरह से शैल एक्सटेंशन काम करते हैं, वे स्वयं को एक प्रक्रिया में इंजेक्ट करते हैं। तो अगर .NET 3.5 एक .NET 2 प्रक्रिया में इंजेक्ट किया जाता है - धमाके

तो, मैं .NET 4.0 अब उपयोग कर सकते हैं?

क्या कोई काम करने वाला, डाउनलोड करने योग्य, वीएस -2010 समाधान है जो एक सरल खोल एक्सटेंशन जोड़ता है?

मैं दिन में सी ++ के साथ इतना बुरा नहीं था, लेकिन .NET के लिए मोल्डिंग के वर्षों के बाद मैं काफी जंगली हूं, और इस तरह, त्रुटियों की मेजबानी को ठीक करने के विवरण के साथ झुकाव मौजूदा उदाहरणों पर साबित हो रहा है ... विचित्र रूप से!

मैं वास्तव में एक साफ स्लेट के साथ शुरू कर सकता हूं कि मैं खुद को तोड़ सकता हूं और पता लगा सकता हूं कि I गलत था!

+0

हां, अब आप .NET 4.0 का उपयोग कर सकते हैं। इस तरह के उपयोग को समर्थन देने के लिए इन-प्रोसेस साइड-बाय-साइड का स्पष्ट रूप से आविष्कार किया गया था। –

+0

@ हंस - तो .NET 4 .NET 2 में इंजेक्ट करेगा और सभी जीवित रहेंगे? – joshcomley

+0

साइड-बाय-साइड, कोई इंजेक्शन नहीं। –

उत्तर

7

मैंने थोड़ी देर के लिए संघर्ष किया और x64 मुद्दों और एसडीके मतभेदों के कारण कोड प्रोजेक्ट आलेख में सीमित सफलता प्राप्त की।

मैंने हाल ही में परियोजना को बैक अप लिया और एमएस all-in-one कोड नमूना का उपयोग करके शुरू किया और मैं बहुत खुश हूं। यह एक सरल उदाहरण संदर्भ मेनू बनाता है और 64 बॉक्स से बाहर काम करता है:

  1. ऑल-इन-एक नमूना ब्राउज़र के माध्यम से कोड डाउनलोड या प्रत्यक्ष का उपयोग करें: http://code.msdn.microsoft.com/windowsdesktop/CppShellExtContextMenuHandl-410a709a

    यह आपकी मशीन पर चलाने के लिए संपर्क।व्यवस्थापक अधिकार के तहत वी.एस. में

  2. ओपन परियोजना
  3. स्विच निर्माण 64 को config और यह
  4. को मार डालो सब एक्सप्लोरर सत्र का निर्माण
  5. नया dll का पता लगाएं और regsvr32.exe चलाते हैं। \ CppShellExtContextMenuHandler.dll
  6. खुला एक्सप्लोरर फिर से और सही नए मेनू
  7. देखने के लिए एक .cpp फ़ाइल क्लिक

मेरे अगले कदम/u ध्वज के साथ एक ही आदेश चलाकर इसे हटाने डी प्राप्त करने के लिए है काम कर रहे गुस्सा दिलाना और मुझे लगता है कि यह काम कर सकता है: msdn

1

एक सी ++ एक्सटेंशन के लिए विंडोज 7 x64 पर आपको इसे एक x64 प्रोजेक्ट के रूप में बनाने की आवश्यकता है। विजुअल स्टूडियो 2010 में एटीएल विज़ार्ड पर एक खोल एक्सटेंशन प्रोजेक्ट बनाने का एक विकल्प है जो पूर्वावलोकन विंडो समर्थन, थंबनेल और विंडोज खोज समर्थन प्रदान करता है। मैंने हाल ही में इसका इस्तेमाल किया और एक बार बनाया, कुछ भी नहीं हुआ। हालांकि, एक x64 डीएल बनाने के लिए प्रोजेक्ट कॉन्फ़िगरेशन को स्विच करने से यह काम कर रहा है।

.NET - Explorer का उपयोग करने के संबंध में अब प्लगइन को एक अलग उप-प्रक्रिया में लॉन्च करता है। तो .NET 4.0 से लिंक करने वाले शेल एक्सटेंशन को लोड करना .net के उस संस्करण के साथ सब कुछ दूषित नहीं करता है क्योंकि केवल होस्टिंग सबप्रोसेस वास्तव में उस सीएलआर को लोड करेगा। आप इसे एक पूर्वावलोकन विस्तार का उपयोग करके देख सकते हैं क्योंकि इसे शामिल करने के लिए एक नई प्रक्रिया (prevhost) लॉन्च हो जाती है।

+0

आपको 32 और 64 बिट संस्करण दोनों स्थापित करने की आवश्यकता है ताकि आपके 32 बिट ऐप्स एक्सटेंशन भी प्राप्त कर सकें। –

+0

नोट, आप Windows XP में एक्सप्लोरर उप-प्रक्रिया लोडिंग पर भरोसा नहीं कर सकते हैं। वहां, यदि कोई .NET 2 प्लग-इन पहले लोड होता है, तो .NET 4 एक विफल हो जाएगा क्योंकि गलत रनटाइम लोड हो जाता है। यदि .NET 4 पहले लोड होता है, तो .NET 2 एक ठीक लोड करेगा क्योंकि .NET 4 साइड-बाय-साइड रनटाइम का समर्थन करता है। –

0

मैं इस एक काम कर रहे है: http://www.codeproject.com/Articles/174369/How-to-Write-Windows-Shell-Extension-with-NET-Lang

करें कि आप डी के लिए सही RegAsm.exe उपयोग अवश्य कर लें/पंजीकृत:

  • 32-बिट प्लेटफ़ॉर्म: x86/किसी भी CPU के लिए संकलित करें। C:\Windows\Microsoft.NET\Framework\vXYZ\RegAsm.exe का प्रयोग करें।
  • 64-बिट प्लेटफ़ॉर्म: x64/किसी भी CPU के लिए संकलित करें। C:\Windows\Microsoft.NET\Framework64\vXYZ\RegAsm.exe का प्रयोग करें।

(XYZ .नेट फ्रेमवर्क आप संकलन के लिए इस्तेमाल का संस्करण है।)

हालांकि, ध्यान दें कि Microsoft recommends against using .NET for shell extensions

0

'क्या मैं सी # का उपयोग कर सकता हूं' का संक्षिप्त उत्तर नहीं है। यह इन-प्रोसेस एक्सटेंशन को कार्यान्वित करने के लिए माइक्रोसॉफ्ट के मार्गदर्शन से है। "विशेष नोट का एक रनटाइम सामान्य भाषा रनटाइम (सीएलआर) है, जिसे प्रबंधित कोड या .NET Framework भी कहा जाता है। माइक्रोसॉफ्ट विंडोज एक्सप्लोरर या विंडोज इंटरनेट एक्सप्लोरर में प्रबंधित इन-प्रोसेस एक्सटेंशन लिखने के खिलाफ अनुशंसा करता है और उन्हें एक समर्थित परिदृश्य नहीं मानता । " समस्या उत्पन्न होती है क्योंकि किसी अनुप्रयोग में .NET का केवल एक संस्करण उपयोग किया जा सकता है और यदि एकाधिक .NET एक्सटेंशन उपयोग में हैं तो उस सीमा को लागू करने का कोई तरीका नहीं है।