2012-12-29 16 views
5

मैं एक्सेलडीएनए प्लगइन का निर्माण कर रहा हूं जिसके लिए नेट (4.0 या 3.5) का पूर्ण संस्करण आवश्यक है (मैं System.Web के कुछ हिस्सों का उपयोग कर रहा हूं)। इस वजह से, जिन उपयोगकर्ताओं के पास केवल क्लाइंट संस्करण है, वे त्रुटियां प्राप्त कर रहे हैं।जांचें कि .NET का पूरा संस्करण स्थापित है या नहीं?

मैं उपयोगकर्ता को केवल "क्लाइंट संस्करण स्थापित होने पर स्टार्टअप पर" नवीनतम "संस्करण पॉपअप के साथ संकेत देना चाहता हूं।

क्या कोई पूर्ण मूर्खतापूर्ण तरीका है यह जांचने के लिए कि क्या पूर्ण संस्करण स्थापित है? गुगल करके ऐसा लगता है कि कई रजिस्ट्री की जांच करने की सिफारिश करते हैं, ऐसा लगता है कि यह त्रुटि प्रवण है क्योंकि कई नेट संस्करण हैं। इस तरह के एक मामले रास्तों मैं निर्माण करने के लिए जाँच करने की आवश्यकता है में:

bool IsFullDotNetVersion() 
{ 

} 

यह एक विशेषता यह है कि पूर्ण संस्करण में ही उपलब्ध है के लिए अस्तित्व की जाँच करने के लिए संभव/अच्छा विचार होगा? अर्थात। क्या जांच करना संभव है System.Web पर्यावरण में मौजूद है? (.NET दाएं के क्लाइंट संस्करण में शामिल नहीं है?)

एक साइड प्रश्न के रूप में: मैं अपने सिस्टम पर स्थापित विभिन्न .NET संस्करण के साथ अपने एप्लिकेशन का परीक्षण कैसे कर सकता हूं। क्या कोई नेट स्विचर है?

+0

आपको रजिस्ट्री सेटिंग्स को पढ़ने की आवश्यकता है। [यह] जांचें (http://stackoverflow.com/a/199783/649524) उत्कृष्ट उत्तर – Tilak

+0

मैं नहीं पूछ रहा कि .net संस्करण स्थापित हैं। मैं पूछ रहा हूं कि पूर्ण संस्करण स्थापित है या नहीं। वह पोस्ट यह नहीं बताती कि मुझे निर्धारित करने के लिए जांचने के लिए कितनी सटीक रजिस्ट्री कुंजियों की आवश्यकता है। –

+0

आप .NET पूर्ण प्रोफ़ाइल रजिस्ट्री सेटिंग – Tilak

उत्तर

2

यह देखने के लिए जीएसी में देखें कि System.Web (या जो भी असेंबली आपको चाहिए) मौजूद है।

यहां कुछ कोड है जो works on my machine है।

private static const string BasePath = @"c:\windows\assembly"; 

public static bool HasDotNetFullversion() 
{ 
    var gacFolders = new List<string>() 
    { 
     "GAC", "GAC_32", "GAC_64", "GAC_MSIL", 
     "NativeImages_v2.0.50727_32", "NativeImages_v2.0.50727_64" 
    }; 

    var assemblyFolders = from gacFolder in gacFolders 
          let path = Path.Combine(BasePath, gacFolder) 
          where Directory.Exists(path) 
          from directory in Directory.GetDirectories(path) 
          select directory; 

    var hasSystemWeb = assemblyFolders.Any(x => 
     x.EndsWith("system.web", StringComparison.InvariantCultureIgnoreCase)); 
} 
1

संभावित डुप्लिकेट। How to detect what .NET Framework versions and service packs are installed? संक्षिप्त उत्तर यह है कि आपको रजिस्ट्री को पढ़ने की आवश्यकता है

+0

हां लेकिन क्या रजिस्ट्री कुंजियां? .NET 4.0 के लिए स्पष्ट है, लेकिन .NET 3.5 के लिए? –

+0

यदि आप उपरोक्त टिप्पणी में दिए गए लिंक पर क्लिक करते हैं तो संदर्भित तालिका देखें। आम तौर पर इंस्टॉलर ढांचे की जांच के मुद्दों को संभालते हैं और मैं अनुशंसा करता हूं कि आप एक का उपयोग करें। वे अनइंस्टॉल समस्याओं को भी संभालते हैं। –

+0

@Niels बोस्मा: ढांचे का क्लाइंट प्रोफाइल संस्करण पहले 4.0 के साथ उपलब्ध कराया गया था। आप निम्न की समीक्षा करना चाहेंगे: http://msdn.microsoft.com/en-us/library/bb822049.aspx और http://msdn.microsoft.com/en-us/library/hh925568.aspx साथ ही साथ लिंक माइक प्रदान किया गया। – NotMe

0

मैं सुझाव दूंगा कि क्लाइंट कंप्यूटर के कौन से .NET संस्करण की कोशिश करने और पता लगाने के बजाय, आप बस अपने इंस्टॉलेशन प्रोग्राम में पूर्ण .net इंस्टॉलर को बंडल कर सकते हैं।

दूसरे शब्दों में, इसे स्थापित करने के बिंदु पर पहचानें और उचित कार्यवाही करें। संभावित रूप से लापता ढांचे के हिस्सों से निपटने का यह सामान्य तरीका है।

+1

चूंकि यह एक एक्सेल प्लगइन है, मैं इंस्टॉलर प्रदान नहीं कर रहा हूं। जब आप प्लगइन का उपयोग करना चाहते हैं तो यह ड्रैग और ड्रॉप होता है। –

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