본문 바로가기
C++ 200제/코딩 IT 정보

C# Windows 레지스트리 액세스 방법 - Registry 예제

by vicddory 2019. 9. 30.

C#을 사용하여 Windows 레지스트리를 프로그래밍하여 구성 정보를 저장하고 검색하는 방법을 알아봅니다.



Microsoft .Net을 이용한 프로그래밍 방식으로 Windows 레지스트리에 액세스하여 데이터를 저장하고 검색할 수 있습니다.


Windows 레지스트리는 키, 하위 키, 사전 정의된 키, 하이브 및 값 항목 모음으로 구성된 계층적 데이터베이스이며 시스템별 또는 응용 프로그램별 데이터를 저장하는 데 사용할 수 있습니다. MSDN에서는 "레지스트리는 운영체제 및 컴퓨터의 응용 프로그램에 대한 중앙 정보 저장소 역할을 합니다."라고 설명합니다.

Windows 레지스트리를 활용하여 응용 프로그램의 구성 메타 데이터를 저장하고, 필요한 경우 나중에 검색하여 응용할 수도 있습니다.


Windows 레지스트리는 다음의 정보를 계층적으로 저장합니다.


  1. 사용자 프로필 정보
  2. 시스템의 하드웨어 정보
  3. 속성 설정
  4. 시스템에 설치된 프로그램에 대한 정보


Windows 레지스트리를 조작할 때는 각별히 주의해야 합니다. 필요한 경우 변경 사항을 되돌릴 수 있도록 변경하기 전에 레지스트리를 백업하는 것이 좋습니다. 다음 단계에 따라 Windows 레지스트리 백업을 작성할 수 있습니다.


  1. 시작에서 실행을 선택
  2. Regedit를 입력하고 Enter를 눌러 Windows 레지스트리 편집기를 호출
  3. 파일-> 내보내기를 클릭
  4. "다른 이름으로 저장" 창에서 이름을 지정
  5. 전체 레지스트리 정보를 내보내려면 특정 분기 또는 "전체" 옵션을 선택
  6. 저장 클릭


레지스트리 정보는 지정한 이름의 .reg 파일에 저장됩니다. 그러면, 프로그래밍 방식으로 c# Registry 데이터베이스를 조작할 수 있습니다.



C#에서 Windows 레지스트리 작업

Windows 레지스트리에서 키, 하위 키 및 값을 프로그래밍 방식으로 읽고, 쓰고, 삭제할 수 있습니다. 레지스트리 키는 Windows 시스템의 폴더로 간주할 수 있습니다. 키에는 하위 키가 있을 수 있습니다.


폴더에 하위 폴더가 들어 있는 것과 같은 방식입니다. C#을 사용하여 Windows 레지스트리를 작업하려면 Microsoft.Win32 네임 스페이스에서 Registry 클래스를 활용하면 됩니다.


이제 코드를 살펴보겠습니다.

C#을 사용하여 Windows 레지스트리에서 하위 키를 작성, 읽기 또는 삭제하는 방법을 살펴봅니다.


새 하위 키를 만들려면 아래와 같이 CreateSubKey 메서드를 활용합니다.


1
Registry.CurrentUser.CreateSubKey(@"SOFTWARE\IDG");
cs


CreateSubKey 함수는 새 하위 키를 만든 후 결과를 반환합니다. 반환 유형은 RegistryKey입니다. 다음 코드는 IDG라는 새 하위 키를 작성하고 그 안에 키 값을 저장하는 방법을 보여줍니다.


1
2
3
4
5
6
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\IDG"))
{
    key.SetValue("Key 1""Value 1");
    key.SetValue("Key 2""Value 2");              
    key.Close();
}
cs


하위 키 값을 읽는 방법은 아래와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static string ReadSubKeyValue(string subKey, string key)
{
    string str = string.Empty;
 
    using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(subKey))
    {
        if (registryKey != null)
        {
            str = registryKey.GetValue(key).ToString();
            registryKey.Close();
        }
    }
 
    return str;
}
cs


ReadSubKeyValue 메서드는 하위 키와 키를 매개 변수로 받아 그 값을 반환합니다. 다음은 ReadSubKeyValue 메서드를 호출하는 방법입니다.


1
2
3
4
5
6
7
8
static void Main(string[] args)
{
    string subKey = @"SOFTWARE\IDG";
    string str = ReadSubKeyValue(subKey, "Key 1");
 
    Console.WriteLine(str);
    Console.Read();
}
cs


DeleteSubKey 정적 메서드를 사용하여 하위 키를 삭제할 수 있습니다. 다음 코드는 이를 수행하는 방법입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
static bool DeleteKey(string KeyName)
{
    try
    {
        Registry.CurrentUser.DeleteSubKey(KeyName);
 
        return true;
    }
    catch
    {
        return false;
    }
}
cs


위의 메서드는 하위 키 삭제가 성공하면 true를, 그렇지 않으면 false를 반환합니다. 하위 키를 삭제하기 전에 하위 키가 존재하는지 확인하는 것이 좋습니다. 예외 처리는 최소화됩니다. 이 변경 사항을 통합하려면 위 코드는 수정해야 합니다.

c# RegistryKey 클래스의 GetSubKeyNames 메서드를 사용하여 특정 키의 모든 하위 키를 검색 할 수 있습니다. 다음 코드는 이를 응용하는 방법입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
static List<string> GetChildSubKeys(string key)
{
    List<string> lstSubKeys = new List<string>();
 
    try
    {
        using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(key))
        {
            if (!(registryKey == null))
            {
                string[] temp = registryKey.GetSubKeyNames();
 
                foreach (string str in temp)
                {
                    lstSubKeys.Add(str);
                }
            }
        }
    }
    catch
    {
        //Write your custom exception handling code here
    }
 
    return lstSubKeys;
}
cs


GetChildSubKeys 함수를 사용하고 특정 키의 모든 하위 키를 검색하려면 다음 코드를 이용합니다.


1
List<string> lstSubKeys = GetChildSubKeys(subKey);
cs



관련 글

C# Registry GetValue() 32 64비트 예제 - NULL만 반환할 때

Crypto 암호화 알고리즘 로그인 폼, WinCE MFC 다이얼로그

C# 액티브엑스 dl) VB 이식 방법 (ActiveX DLL)

비주얼 스튜디오 업데이트 실패 해결 (.Net Framework 재설치)

댓글