2013-08-14 2 views
30

내 응용 프로그램을 시작할 때 사용자가 특정 버전의 소프트웨어가 설치되어 있는지 확인하려고합니다. 특히 MySQL 커넥터가 모두 C#을 사용하고 있는지 확인하려고합니다. 레지스트리에는 MySQL에 버전 항목이 들어 있습니다. 그래서 내가 성취하려고하는 것은 이것입니다.레지스트리 키의 값을 읽는 방법 C#

내 앱이 시작됩니다. 시작 코드의 어딘가에서 다음과 같은 일을 순서대로 수행해야합니다. 사용자가 커넥터가 설치되어있는 경우 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net

, 나는 그들이 어떤 버전을 확인하고 싶어서 ... 사용자가에 위치하고 설치된 MySQL의 커넥터를 가지고 있는지 확인하는 이름 = "버전"및 데이터 = 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;을 추가해야합니다.

그럼 당신은 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 
} 

는 조심 : 당신이 관리자 권한이 없다면, 당신은 LOCAL_MACHINE에 많은 일을 할 수있을 가능성이 있습니다. 때때로 값을 읽는 것조차 관리자 권한이없는 의심스러운 작업 일 수 있습니다.

+0

제공하신 내용을 반영하도록 코드를 업데이트했지만 위와 같이 문제가 발생했습니다. , 어떤 도움? – Scalahansolo

+0

여분의 '.' – DonBoitnott

+6

블록을 사용할 때 'RegistryKey'를 사용해야합니다. IDisposable을 구현합니다. –

관련 문제