C/C++ 시절의 윈도우 응용 프로그램과는 달리 XCopy 배포가 선호되는 닷넷 응용 프로그램의 경우

레지스트리를 사용하는 것을 그다지 선호하지 않는다. 하지만 레지스트리에는 윈도우의 많은 정보가

저장돼 있으므로 때로는 접근해야 할 명백한 사유가 발생하곤 한다. 이럴 때 Win32 API를 직접 사용

하기보다는 Microsoft.Win32 네임스페이스에서 제공되는 Registry, RegistryKey 타입을 이용하면

간단하게 코드를 작성할 수 있다.

예를 들어, 윈도우의 레지스트리 편집기(regedit.exe) 에서 컴퓨터의 메인보드에 장착된 바이오스의

날짜와 버전을 구할 수 있는 경로는 다음과 같다.

Untitled

상단의 “\HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS” 경로를 코드로 접근해 보자

static void Main(string[] args)
{
    string regPath = @"HARDWARE\\DESCRIPTION\\System\\BIOS";

    using (RegistryKey systemKey = Registry.LocalMachine.OpenSubKey(regPath))
    {
        string biosDate = (string)systemKey.GetValue("BIOSReleaseDate");
        string biosMaker = (string)systemKey.GetValue("BIOSVendor");

        Console.WriteLine("BIOS 날짜: " + biosDate);
        Console.WriteLine("BIOS 제조사: " + biosMaker);
    }
}

Untitled

보다시피 regedit.exe 에서 구한 경로에서 “HKEY_LOCAL_MACHINE”은 별도로 분리되어 Registry

타입의 정적 속성으로 제공되는 Localmachine으로 연결하고 있다. 레지스트리의 이런 경로 관계를

정리해 보았다.

Registry 정적 속성 대응되는 레지스트리 루트 경로
ClasseRoot HKEY_CLASS_ROOT
CurrentUser HKEY_CURRENT_USER
LocalMachine HKEY_LOCAL_MACHINE
Users HKEY_USERS
CurrentConfig HKEY_CURRENT_CONFIG