2013-08-14 7 views
30

मेरे आवेदन की शुरुआत में मैं यह देखने की कोशिश कर रहा हूं कि उपयोगकर्ता के पास सॉफ़्टवेयर का एक विशिष्ट संस्करण स्थापित है, विशेष रूप से MySQL कनेक्टर, सभी C# का उपयोग कर रहे हैं। रजिस्ट्री में, MySQL में एक संस्करण प्रविष्टि है। तो मैं इसे पूरा करने की कोशिश कर रहा हूं यह है।रजिस्ट्री कुंजी का मूल्य कैसे पढ़ा जाए C#

मेरा ऐप शुरू होता है। स्टार्टअप कोड में कहीं भी मुझे निम्नलिखित चीजों को क्रम में करने की ज़रूरत है। यदि उपयोगकर्ता MySQL कनेक्टर स्थापित है, जो में स्थित है को देखने के लिए जाँच करें ...

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net

उपयोगकर्ता कनेक्टर स्थापित किया गया है, मैं क्या संस्करण वे है, जांच करने के लिए करना चाहता था जो नाम = "संस्करण" और डेटा = xxx (नीचे चित्र)

अब उपयोगकर्ता के पास एक विशिष्ट संस्करण स्थापित है, तो मैं अन्य कोड निष्पादित करूंगा, जहां से मैं ले सकता हूं।

इस बारे में जाने का सबसे अच्छा तरीका क्या होगा?

enter image description here

संपादित करें: नीचे कोड मैं वर्तमान में है और मैं (यह टिप्पणी की है) लाइन 19 पर एक त्रुटि हो रही है। मेरी त्रुटि कहती है "error CS1001: Identifier Expected" मैं इसका अर्थ समझने में सक्षम नहीं था। कोई मदद?

using System; 
using Microsoft.Win32; 
using System.Data; 

public class regTest 
{ 
    public static void Main() 
    { 
     try 
     { 
      RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"); 
      if (key != null) 
      { 
       Object o = key.GetValue("Version"); 
       if (o != null) 
       { 
        Version version = new Version(o as String); //"as" because it's REG_SZ...otherwise ToString() might be safe(r) 
        Version broken = new Version("6.7.4"); 
        if (version.Equals.(broken)) //This is where the error is occuring 
        { 
         DataSet dataSet = ConfigurationManager.GetSection("system.data") as ystem.Data.DataSet; 

         DataView vi = dataSet.Tables[0].DefaultView; 
         vi.Sort = "Name"; 
         if (vi.Find("MySql") == -1) 
         { 
          dataSet.Tables[0].Rows.Add("MySql" 
           , "MySql.Data.MySqlClient" 
           , "MySql.Data.MySqlClient" 
           , 
           typeof(MySql.Data.MySqlClient.MySqlClientFactory).AssemblyQualifiedName); 
         } 

        } 

       } 
      } 
     } 

     catch (Exception ex) //just for demonstration...it's always best to handle specific exceptions 
     { 
      //react appropriately 
     } 
    } 
} 
+1

http://msdn.microsoft.com/en-us/library/microsoft.win32.registry.getvalue.aspx – Marcus

उत्तर

56

आपको पहले अपने कोड पेज पर using Microsoft.Win32; जोड़ने की आवश्यकता है। जब तक आप व्यवस्थापकीय पहुंच है, तो आप LOCAL_MACHINE में ज्यादा करने में सक्षम होने की संभावना नहीं:

तो फिर तुम Registry वर्गों का उपयोग करने के लिए शुरू कर सकते हैं:

try 
{ 
    using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net")) 
    { 
     if (key != null) 
     { 
      Object o = key.GetValue("Version"); 
      if (o != null) 
      { 
       Version version = new Version(o as String); //"as" because it's REG_SZ...otherwise ToString() might be safe(r) 
       //do what you like with version 
      } 
     } 
    } 
} 
catch (Exception ex) //just for demonstration...it's always best to handle specific exceptions 
{ 
    //react appropriately 
} 

सावधान। कभी-कभी मूल्य पढ़ने भी व्यवस्थापक अधिकारों के बिना एक संदिग्ध ऑपरेशन हो सकता है।

+0

मैंने अपना कोड अपडेट किया है जो आपने मुझे प्रदान किया है, लेकिन मैं ऊपर दिखाए गए एक समस्या में भाग गया , कोई मदद? – Scalahansolo

+0

अतिरिक्त '।' बाहर निकालें – DonBoitnott

+6

ब्लॉक का उपयोग करने के भीतर किसी को 'रजिस्ट्रीकी' का उपयोग करना चाहिए। वे IDISposable लागू करते हैं। –

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