.Net 1.x에서는 Microsoft.Win32.RegistryKey 클래스의 GetValue 메서드를 사용하여 레지스트리 데이터를 읽을 때 데이터가 실제로 "처리"됩니다.
예를 들어 특정 문자열 데이터의 원래 값은 다음과 같습니다.
%SystemRoot%System32IoLogMsg.dll
그러나 GetValue 메서드를 사용하여 얻은 데이터는
C:WINDOWSSystem32IoLogMsg.dll
즉, 레지스트리에서 문자열을 읽을 때 시스템은 자체적으로 환경 변수를 확장합니다.
이렇게 하면 Environment.ExpandEnvironmentVariables 메서드를 호출하는 수고가 줄어들지만 반대로 레지스트리 문자열을 그대로 복사하려는 경우에는 무력합니다.
.Net2.0에서는 Microsoft.Win32.RegistryKey 클래스에 작은 변경 사항이 있다는 사실에 놀랐습니다. 즉, GetValue 메서드에 새 오버로드가 추가되었습니다.
공개 객체 GetValue(
문자열 이름,
개체 기본값값,
RegistryValueOptions 옵션
) 이 메서드의 세 번째 매개 변수는 열거형이며 현재 유일하게 유용한 값은 DoNotExpandEnvironmentNames입니다.
이 값을 지정하면 GetValue로 얻은 결과는 확장되지 않은 데이터입니다.