No .Net 1.x, ao usar o método GetValue da classe Microsoft.Win32.RegistryKey para ler os dados do registro, os dados são realmente "processados";
Por exemplo, o valor original de uma determinada string de dados é
%SystemRoot%System32IoLogMsg.dll
Mas os dados obtidos usando o método GetValue são
C:WINDOWSSystem32IoLogMsg.dll
Em outras palavras, ao ler a string no registro, o sistema expandirá as variáveis de ambiente para você por sua própria iniciativa.
Isso nos poupa o trabalho de chamar o método Environment.ExpandEnvironmentVariables, mas, por outro lado, quando queremos copiar uma string de registro intacta, ficamos impotentes.
No .Net2.0, ficamos agradavelmente surpresos ao descobrir que a classe Microsoft.Win32.RegistryKey possui uma pequena alteração, ou seja, uma nova sobrecarga foi adicionada ao seu método GetValue:
objeto público GetValue (
nome da sequência,
Valor padrão do objeto,
Opções de RegistryValueOptions
) O terceiro parâmetro deste método é uma enumeração e atualmente o único valor útil é DoNotExpandEnvironmentNames.
Especifique este valor e o resultado obtido por GetValue serão os dados que não foram expandidos.