В .Net 1.x при использовании метода GetValue класса Microsoft.Win32.RegistryKey для чтения данных реестра данные фактически «обрабатываются»;
Например, исходное значение определенных строковых данных равно
%SystemRoot%System32IoLogMsg.dll
Но данные, полученные с помощью метода GetValue,
C:WINDOWSSystem32IoLogMsg.dll
Другими словами, при чтении строки в реестре система по своей инициативе расширит для вас переменные среды.
Это избавляет нас от необходимости вызывать метод Environment.ExpandEnvironmentVariables, но, наоборот, когда мы хотим скопировать строку реестра без изменений, мы беспомощны.
В .Net2.0 мы были приятно удивлены, обнаружив, что в классе Microsoft.Win32.RegistryKey есть небольшое изменение, а именно, к его методу GetValue добавлена новая перегрузка:
общедоступный объект GetValue (
имя строки,
Объект defaultValue,
Параметры RegistryValueOptions
) Третий параметр этого метода является перечислением, и в настоящее время единственным полезным значением является DoNotExpandEnvironmentNames.
Укажите это значение, и результатом, полученным GetValue, будут данные, которые не были расширены.