En .Net 1.x, cuando se utiliza el método GetValue de la clase Microsoft.Win32.RegistryKey para leer datos de registro, los datos en realidad se "procesan";
Por ejemplo, el valor original de una determinada cadena de datos es
%SystemRoot%System32IoLogMsg.dll
Pero los datos obtenidos usando el método GetValue son
C:WINDOWSSystem32IoLogMsg.dll
En otras palabras, al leer la cadena en el registro, el sistema expandirá las variables de entorno por su propia iniciativa.
Esto nos ahorra la molestia de llamar al método Environment.ExpandEnvironmentVariables, pero a la inversa, cuando queremos copiar una cadena de registro intacta, no podemos hacer nada.
En .Net2.0, nos sorprendió gratamente descubrir que la clase Microsoft.Win32.RegistryKey tiene un pequeño cambio, es decir, se agregó una nueva sobrecarga a su método GetValue:
Objeto público GetValue (
nombre de cadena,
Valor predeterminado del objeto,
Opciones de RegistryValueOptions
) El tercer parámetro de este método es una enumeración y actualmente el único valor útil es DoNotExpandEnvironmentNames.
Especifique este valor y el resultado obtenido por GetValue serán los datos que no se han expandido.