दिलचस्प पोस्ट
Web.config में कनेक्शन स्ट्रिंग को एन्क्रिप्ट करना सी # में स्ट्रिंग और टूस्ट्रिंग () विधि के लिए एक इंट को काटने के बीच अंतर क्या है PHPExcel वर्ग Zend Autoloader में नहीं मिला प्रेषण_असिनक को समझना जीएटीटी कॉलबैक पंजीकृत करने में विफल रहता है यूआरएल / रेगेक्स का प्रयोग डोमेन के लिए सत्यापन? (रेल) Android पर ब्राउज़र द्वारा फ़ाइल डाउनलोड करते समय सामग्री प्रकार के मुद्दों से बचने कैसे आईएसओ जावा के साथ Asp.net में 11 का पता लगाने के लिए क्या मॉडलस्टेट है। क्या वैध है ASP.NET MVC में NerdDinner में मान्य है? इकाई फ्रेमवर्क, कोड प्रथम और पूर्ण पाठ खोज मैं अजगर-एलडीएपी स्थापित नहीं कर सकता जावास्क्रिप्ट में कुंजीप्रेसेस का पता लगाने का सबसे सरल तरीका आईओएस 5: एक इमोजी को एक यूनिकोड वर्ण में कनवर्ट कैसे करें? 1 सेकंड टाइमआउट के साथ आईपी से पायथन लुकअप होस्टनाम जर्सी 2.0 के साथ निर्भरता इंजेक्शन

सी # के साथ विंडोज़ शेल एक्सटेंशन

मैं संदर्भ मेनू में जोड़ने के लिए एक सरल विंडोज खोल एक्सटेंशन लिखना चाहता था, और सी # यह भाषा है जो मैं इन दिनों सबसे अधिक उपयोग करता हूं क्या यह खोल विस्तार के लिए एक अच्छा विकल्प है? इंटरफेस क्या इसके साथ पाने के लिए आसान है? वहाँ अतिरिक्त ओवरहेड है जो मेनू पॉप अप करने के लिए धीमी गति से हो सकता है?

किसी भी एक शुरू करने के लिए अच्छा संकेत है?

Solutions Collecting From Web of "सी # के साथ विंडोज़ शेल एक्सटेंशन"

एक रेमंड का पोस्ट: प्रबंधित कोड में इन-प्रोसेस शेल एक्सटेंशन नहीं लिखें ।


एक हालिया अनुवर्ती: अब, .NET फ़्रेमवर्क के संस्करण 4 में इन-प्रोसेस के साथ-साथ साइड रनटायम्स का समर्थन करता है, अब क्या प्रबंधित कोड में शेल एक्सटेंशन लिखना ठीक है?

निचली रेखा है, नहीं, यह ठीक नहीं है:

इन-प्रोसेस एक्सटेंशन के कार्यान्वयन के लिए मार्गदर्शन को संशोधित किया गया है, और वह प्रबंधित कोड में शेल एक्सटेंशन और इंटरनेट एक्सप्लोरर एक्सटेंशन (और अन्य प्रकार के इन-प्रोसेस एक्सटेंशंस) लिखने के खिलाफ सिफारिश जारी रखता है, भले ही आप संस्करण 4 या अधिक का उपयोग कर रहे हों

शिल की तरह दिखने के जोखिम पर, ईज़ी शेल एक्सटेंशन, सी # में शेल एक्सटेंशन विकास के लिए एक अद्भुत (लेकिन गैर-मुक्त) रूपरेखा है। आप लगभग 20 लिंक्स कोड के साथ एक साधारण प्रसंग मेनू एक्सटेंशन लिख सकते हैं और, सबसे अच्छा, COM इंटरफेस के साथ गड़बड़ करने के लिए कभी नहीं। मेरी कंपनी वर्तमान में वर्तमान में हजारों ग्राहकों द्वारा उपयोग किए जाने वाले एक्सटेंशन के एक सेट के लिए (और उनके नेमस्पे एक्सटेंशन फ्रेमवर्क) का उपयोग करती है, और इसके लिए इसके मूल्य के लिए, हमने कभी ऊपर वर्णित सीएलआर संघर्ष में कोई समस्या नहीं की है

यह दिखाने के लिए एक त्वरित नमूना है कि यह कितना आसान है:

[Guid("00000000-0000-0000-0000-000000000000"), ComVisible(true)] [TargetExtension(".txt", true)] public class SampleExtension : ContextMenuExtension { protected override void OnGetMenuItems(GetMenuitemsEventArgs e) { e.Menu.AddItem("Sample Extension", "sampleverb", "Status/help text"); } protected override bool OnExecuteMenuItem(ExecuteItemEventArgs e) { if (e.MenuItem.Verb == "sampleverb") ; // logic return true; } [ComRegisterFunction] public static void Register(Type t) { ContextMenuExtension.RegisterExtension(typeof(SampleExtension)); } [ComUnregisterFunction] public static void UnRegister(Type t) { ContextMenuExtension.UnRegisterExtension(typeof(SampleExtension)); } } 

इन-प्रोसेस एक्सटेंशन के कार्यान्वयन के लिए मार्गदर्शन

संस्करण संघर्ष

एक संस्करण संघर्ष एक रनटाइम के माध्यम से उत्पन्न हो सकता है जो एकल प्रक्रिया के भीतर एकाधिक रनटाइम संस्करण लोड करने का समर्थन नहीं करता। संस्करण 4.0 से पहले सीएलआर के संस्करण इस श्रेणी में आते हैं। यदि एक रनटाइम के एक संस्करण को लोड करना उसी क्रम के अन्य संस्करणों को लोड करने से रोकता है, तो यह एक विवाद पैदा कर सकता है यदि मेजबान एप्लिकेशन या अन्य इन-एक्स्स्टेंट एक्सटेंशन किसी परस्पर विरोधी संस्करण का उपयोग करता है। एक अन्य इन-प्रोसेस एक्सटेंशन के साथ संस्करण विवाद के मामले में, विरोध को पुन: उत्पन्न करना मुश्किल हो सकता है क्योंकि विफलता के लिए सही परस्पर विरोधी एक्सटेंशन की आवश्यकता होती है और असफलता मोड उस आदेश पर निर्भर करता है जिसमें विवादित एक्सटेंशन लोड होते हैं।

संस्करण 4.0 से पहले सीएलआर के संस्करण का उपयोग करते हुए लिखित एक इन-प्रोसेस एक्सटेंशन पर विचार करें। कंप्यूटर पर हर आवेदन जो फ़ाइल का उपयोग करता है खोलें संवाद बॉक्स संभवतः संवाद का प्रबंधित कोड हो सकता है और उसके परिचर सीएलआर निर्भरता को एप्लिकेशन की प्रक्रिया में लोड किया जा सकता है अनुप्रयोग या विस्तार जो पहली बार आवेदन प्रक्रिया में CLR के पूर्व-4.0 संस्करण को लोड करने के लिए प्रतिबंधित करता है, उस पर सीएलआर के संस्करणों का उपयोग उस प्रक्रिया से बाद में किया जा सकता है। यदि एक खुले संवाद बॉक्स के साथ एक प्रबंधित अनुप्रयोग सीएलआर के विरोधाभासी संस्करण पर बनाया गया है, तो एक्सटेंशन सही तरीके से चलाने में विफल हो सकता है और अनुप्रयोग में विफलता का कारण बन सकता है। इसके विपरीत, यदि किसी प्रक्रिया में लोड करने के लिए एक्सटेंशन सबसे पहले होता है और प्रबंधित कोड का एक विरोधाभासी संस्करण उसके बाद लॉन्च करने की कोशिश करता है (शायद एक प्रबंधित एप्लिकेशन या चल रहे एप्लिकेशन मांग पर CLR लोड करता है), तो ऑपरेशन विफल हो जाता है। उपयोगकर्ता के लिए, ऐसा प्रतीत होता है कि एप्लिकेशन की कुछ सुविधाएं बेतरतीब ढंग से काम करना बंद कर देती हैं, या ऐप्स को रहस्यमय रूप से क्रैश करता है

ध्यान दें कि संस्करण 4.0 के बराबर या बाद के संस्करण सीएलआर के संस्करण सामान्यतः संस्करण समस्या के लिए अतिसंवेदनशील नहीं होते हैं क्योंकि वे एक दूसरे के साथ और सीएलआर के सबसे पूर्व -4.0 संस्करणों के साथ एकरूप होने के लिए डिज़ाइन किए गए हैं (संस्करण 1.0 के अपवाद के साथ, जो अन्य संस्करणों के साथ मिलकर रहें) हालांकि, इस विषय के शेष भाग में चर्चा की गई संस्करण विरोधों के अलावा अन्य समस्याएं उत्पन्न हो सकती हैं

प्रदर्शन के कारण

निष्पादन के मुद्दे रनटाइम्स से उत्पन्न हो सकते हैं, जो किसी प्रक्रिया में लोड किए जाने पर एक महत्वपूर्ण प्रदर्शन जुर्माना लगाते हैं। प्रदर्शन जुर्माना स्मृति उपयोग, सीपीयू उपयोग, बीते समय या यहां तक ​​कि स्थान की खपत के रूप में भी हो सकता है। सीएलआर, जावास्क्रिप्ट / ईसीएमएस्क्रिप्ट और जावा उच्च प्रभाव रनटाइम होने के लिए जाना जाता है। चूंकि इन-प्रोसेस एक्सटेंशन कई प्रक्रियाओं में लोड किए जा सकते हैं, और अक्सर प्रदर्शन-संवेदनशील क्षणों पर ऐसा किया जाता है (जैसे कि उपयोगकर्ता को प्रदर्शित करने के लिए मेनू तैयार करते समय), उच्च प्रभाव रनटाइम्स नकारात्मक प्रतिक्रिया को समग्र उत्तरदायित्व पर प्रभाव डाल सकता है।

एक उच्च प्रभाव रनटाइम जो महत्वपूर्ण संसाधनों का सेवन करता है, मेजबान प्रक्रिया या अन्य इन-प्रोसेस एक्सटेंशन में विफलता का कारण बन सकता है। उदाहरण के लिए, एक उच्च प्रभाव रनटाइम जो उसके ढेर के लिए पते के सैकड़ों मेगाबाइट्स का उपयोग करता है, हो सकता है कि मेजबान अनुप्रयोग बड़े डाटासेट को लोड करने में असमर्थ हो। इसके अलावा, क्योंकि इन-प्रोसेस एक्सटेंशन को कई प्रक्रियाओं में लोड किया जा सकता है, एक एकल एक्सटेंशन में उच्च संसाधन खपत पूरे सिस्टम में उच्च संसाधन खपत में त्वरित रूप से गुणा कर सकते हैं।

यदि कोई रनटाइम लोड होता है या अन्यथा संसाधनों का उपभोग करने के लिए जारी रहता है, तब भी जब उस रनटाइम का उपयोग करने वाला एक्सटेंशन उतार दिया जाता है, तो उस रनटाइम को किसी एक्सटेंशन में उपयोग के लिए उपयुक्त नहीं है।

.NET फ्रेमवर्क के लिए विशिष्ट मुद्दे

निम्नलिखित अनुभाग एक्सटेंशन के लिए प्रबंधित कोड का उपयोग करते हुए मिले समस्याओं के उदाहरणों पर चर्चा करते हैं। वे सभी संभावित समस्याओं की एक पूरी सूची नहीं है जो आपको मुठभेड़ कर सकते हैं। यहां चर्चा की गई चर्चाएं दोनों कारणों से हैं, जब आप दूसरे रनटाइम के उपयोग का मूल्यांकन करते हैं, तो इस बात पर विचार करने के लिए प्रबंधित कोड एक्सटेंशन और बिंदुओं में समर्थित नहीं हैं।

  • पुन: entrancy
    जब सीएलआर एक मॉनिटर के कारण एकल-थ्रेडेड अपार्टमेंट (एसटीए) धागा को ब्लॉक करता है। एंटर, होह्ंडल। वाइटऑन, या कंटेंट लॉक स्टेटमेंट, सीएलआर, अपने मानक कॉन्फ़िगरेशन में, एक नेस्टेड मेसेज लूप में प्रवेश करती है जब वह प्रतीक्षा करता है संदेशों को प्रसंस्करण से कई विस्तार विधियां निषिद्ध हैं, और यह अप्रत्याशित और अप्रत्याशित रीएन्ट्रैन्सी का अनुचित व्यवहार हो सकता है जो पुनरुत्पादन और निदान करना मुश्किल है।

  • Multithreaded Apartment CLR घटक ऑब्जेक्ट मॉडल (COM) ऑब्जेक्ट्स के लिए रनटाइम कॉलबल रैपर बनाता है। ये एक समान क्रमबद्ध कॉलबल रैपर बाद में सीएलआर के अंतिम रूप से नष्ट हो जाते हैं, जो मल्टीथ्रेडेड अपार्टमेंट (एमटीए) का हिस्सा है। एसटीए से एमटीए तक प्रॉक्सी को स्थानांतरित करने की आवश्यकता होती है, लेकिन एक्सटेंशन द्वारा उपयोग किए जाने वाले सभी इंटरफेस को नियंत्रित नहीं किया जा सकता है।

  • गैर-निर्धारित वस्तु-वस्तु लाइफटाइम्स
    सीएलआर मूल कोड की तुलना में कमजोर ऑब्जेक्ट लाइफटाइम गारंटी देता है। कई एक्सटेंशन ऑब्जेक्ट्स और इंटरफेस पर संदर्भ संख्या की आवश्यकता है, और सीएलआर द्वारा नियोजित कचरा संग्रह मॉडल इन आवश्यकताओं को पूरा नहीं कर सकता है

    • यदि कोई सीएलआर ऑब्जेक्ट एक COM ऑब्जेक्ट के संदर्भ को प्राप्त करता है, तो रनटाइम कॉल करने योग्य रैपर द्वारा आयोजित COM ऑब्जेक्ट रेफरेंस जारी नहीं किया जाता है जब तक रनटाइम कॉल करने योग्य रेंडर कचरा-एकत्र नहीं होता है। नैन्देटेरमनिस्टिक रिलीज़ व्यवहार कुछ अंतरफलक अनुबंधों के साथ संघर्ष कर सकता है। उदाहरण के लिए, आईपर्सिस्टप्रॉपर्टीबैग :: लोड पद्धति की आवश्यकता है कि लोड विधि रिटर्न के दौरान प्रॉपर्टी बैग के संदर्भ में ऑब्जेक्ट को बनाए रखा जाए।
    • यदि कोई सीएलआर ऑब्जेक्ट संदर्भ को मूल कोड में वापस किया जाता है, तो रनटाइम कॉल करने योग्य रेंडर सीएलआर ऑब्जेक्ट के संदर्भ को त्याग देता है, जब रनटाइम कॉल करने योग्य आवरण का अंतिम कॉल रिलीज किया जाता है, लेकिन अंतर्निहित सीएलआर ऑब्जेक्ट को कचरा एकत्रित होने तक अंतिम रूप नहीं दिया जाता है। कुछ इंटरफेस कॉन्ट्रैक्ट्स के साथ निंदात्मकता को अंतिम रूप दिया जा सकता है। उदाहरण के लिए, थंबनेल हैंडलरों को सभी संसाधनों को तत्काल रिलीज़ करने की आवश्यकता होती है, जब उनकी संदर्भ गणना शून्य हो जाती है

प्रबंधित कोड और अन्य रनटाइम के स्वीकार्य उपयोग

आउट-ऑफ़-प्रोसेस एक्सटेंशंस को लागू करने के लिए प्रबंधित कोड और अन्य रनटाइम का उपयोग करना स्वीकार्य है। आउट-ऑफ़-प्रोसेस शेल एक्सटेंशन के उदाहरण निम्न शामिल हैं:

  • पूर्वावलोकन हैंडलर
  • कमांड-लाइन-आधारित कार्रवाइयां जैसे कि शेल \ वर्ब \ कमांड उपकुंज के अंतर्गत पंजीकृत हैं
  • COM ऑब्जेक्ट एक स्थानीय सर्वर में कार्यान्वित किए गए हैं, शेल एक्स्टेंशन पॉइंट के लिए जो कि आउट-ऑफ-प्रोसेस सक्रियण की अनुमति देते हैं।

कुछ एक्सटेंशन को इन-प्रोसेस या आउट-ऑफ-प्रोसेस एक्सटेंशन के रूप में लागू किया जा सकता है। आप इन एक्सटेंशन को आउट-ऑफ-प्रोसेस एक्सटेंशन के रूप में लागू कर सकते हैं यदि इन-इनिस एक्सटेंशन के लिए इन आवश्यकताओं को पूरा नहीं करते हैं निम्न सूची एक्सटेंशन के उदाहरण दिखाती है जिसे इन-प्रोसेस या आउट-ऑफ-प्रोसेस एक्सटेंशन के रूप में लागू किया जा सकता है:

  • IExecuteCommand एक शैल \ verb \ command उपकुंजी के अंतर्गत दर्ज एक प्रतिनिधि एक्सिक्ट प्रविष्टि के साथ जुड़ा हुआ है
  • शेल \ वर्ब \ ड्रॉप-टार्गेट उपकुंजी के अंतर्गत पंजीकृत सीएलएसआईडी से संबद्ध आईडीपर्पेटेड
  • IExplorerCommandState एक कमांडस्टैटहैंडलर प्रविष्टि से संबंधित है जो शेल \ वर्ब उपकुंजी के अंतर्गत पंजीकृत है।

SharpShell

तीव्र शेल एनएटी फ्रेमवर्क का उपयोग करके विंडोज शेल एक्सटेंशन बनाने में आसान बनाता है।

स्रोत कोड https://github.com/dwmkerr/sharpshell पर होस्ट किया गया है – आप यहां या वहां प्रश्न और सुविधा अनुरोध पोस्ट कर सकते हैं। समर्थित एक्सटेंशन

आप नीचे दिए गए एक्सटेंशन के किसी भी निर्माण के लिए SharpShell का उपयोग कर सकते हैं:

  • शैल संदर्भ मेनू
  • चिह्न हैंडलर
  • जानकारी टिप हैंडलर
  • ड्रॉप हैंडलर
  • पूर्वावलोकन हैंडलर
  • चिह्न ओवरले हैंडलर
  • थंबनेल हेल्डरर्स
  • संपत्ति शीट एक्सटेंशन

प्रोजेक्ट्स जो शार्पशेल का उपयोग करते हैं
1. Trello Context मेनू
2. असली साधा खिलाड़ी 2.0

CodeProject पर अनुच्छेद श्रृंखला

  • .NET शेल एक्सटेंशन – शेल प्रसंग मेनू
  • .NET शेल एक्सटेंशन – शेल चिह्न हैंडलर
  • .NET शेल एक्सटेंशन – शैल जानकारी टिप हैंडलर
  • .NET शेल एक्सटेंशन – शेल ड्रॉप हैंडलर
  • .NET शेल एक्सटेंशन – शेल पूर्वावलोकन हैंडलर
  • .NET शेल एक्सटेंशन – शेल आइकन ओवरले हैंडलर
  • .NET शेल एक्सटेंशन – शैल थंबनेल हैंडलर
  • .NET शेल एक्सटेंशन – शैल गुण पत्रक