C/C++ 시절의 윈도우 응용 프로그램과는 달리 XCopy 배포가 선호되는 닷넷 응용 프로그램의 경우
레지스트리를 사용하는 것을 그다지 선호하지 않는다. 하지만 레지스트리에는 윈도우의 많은 정보가
저장돼 있으므로 때로는 접근해야 할 명백한 사유가 발생하곤 한다. 이럴 때 Win32 API를 직접 사용
하기보다는 Microsoft.Win32 네임스페이스에서 제공되는 Registry, RegistryKey 타입을 이용하면
간단하게 코드를 작성할 수 있다.
예를 들어, 윈도우의 레지스트리 편집기(regedit.exe) 에서 컴퓨터의 메인보드에 장착된 바이오스의
날짜와 버전을 구할 수 있는 경로는 다음과 같다.

상단의 “\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);
}
}

보다시피 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 |