IT

C# Registry (기본값) 읽기/쓰기

쏘펀 2024. 3. 5.
Windows Registry

주로 윈도우즈 환경 설정과 관련된 각종 정보가 저장되어 있는 집합소라고 보시면 됩니다. 그래서 여기 있는 값을 함부로 수정하면 윈도우가 맛이 가버릴 수도....안됩니다. 레지스트리 값은 레지스트리 편집기에서 확인 및 수정할 수 있습니다.

레지스트리 편집기는 [시작]->[검색](단축키 : Win + Q)에서 레지스트리 편집기를 검색하거나 [시작]->[실행](단축키 :  Win + R)에서 regedit를 입력해서 실행해주시면 됩니다.

 

C#으로 Registry 값 관리

Microsoft.Win32 라이브러리를 사용해서 Registry를 관리할 수 있습니다. 아래와 같이 네임스페이스를 추가해줍니다.

using Microsoft.Win32;

 

  • Registry 키 생성 및 값 쓰기
RegistryKey rk = null;
 
// 운영체제가 32bit인지 64bit인지 확인하여 registry 키 오픈
if (Environment.Is64BitOperatingSystem)
   rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
else
   rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
 
// 키 생성
rk = rk.CreateSubKey(@"SOFTWARE\HelloRegistry", RegistryKeyPermissionCheck.ReadWriteSubTree);

// 생성한 키에 값 쓰기
rk.SetValue("testKey", "testValue", RegistryValueKind.String);
// (기본값) 키에 값 쓰기
// rk.SetValue("", "testValue", RegistryValueKind.String);

// 오픈한 키 닫기
rk.Close();

Registry의 저장값은 운영체제가 32bit인지, 64bit인지에 따라 값이 저장되는 경로가 다릅니다.

그래서 키 생성하기 전에 먼저 운영체제가 몇 bit 운영체제인지 확인하고 그에 맞는 경로에 키생성 및 키 값을 작성해줘야 합니다.

키 이름이 (기본값)인 곳에 값을 쓰고 싶다면 키이름을 "" 으로 넣어주면 됩니다.
rk.SetValue("", "testValue", RegistryValueKind.String);

 

 

  • Registry 키 값 읽기
 string regValue = string.Empty;
 
 // 운영체제가 32bit인지 64bit인지 확인하여 registry 키 오픈
 if (Environment.Is64BitOperatingSystem)
     rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
 else
     rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
 rk = rk.OpenSubKey(@"SOFTWARE\HelloRegistry", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.ReadKey);
 
 // 키가 아예 존재하지 않을수도 있음. 그럴 경우 "NULL"값으로 반환하도록 처리
 if (rk == null)
    regValue = "NULL";
 else
 {
 	// 키는 존재하지만 값이 없을수도 있음. 그럴 경우도 "NULL"값으로 반환하도록 처리
    regValue = rk.GetValue("testKey", "NULL").ToString();
    // (기본키) 읽기
    // regValue = rk.GetValue("", "NULL").ToString();
    
    // 오픈한 키 닫기
    rk.Close();
 }

Registry를 읽을때도 마찬가지로 운영체제의 bit를 확인해서 해당하는 경로로 접근하도록 처리해줘야 합니다.

키 이름이 (기본값)인 곳에 값을 읽고 싶다면 키이름을 "" 으로 넣어주면 됩니다.
rk.GetValue("", "NULL");

 

댓글