Leer y Escribir en el Registro de Windows desde C#

mayo 8 20103 comentarios

Guardado en : General

El Registro de Windows

El registro de Windows se crea durante la instalación del sistema operativo. Está formado por seis apartados, llamados HKEYS (llaves), perfectamente estructurados y donde se guarda importante información de cada aplicación o dispositivo conectado a nuestro ordenador, además de todas las claves de acceso.     

 HKEY_LOCAL_MACHINE: Es la llave más importante, contiene las versiones de los controladores utilizados por nuestro hardware.     

 HKEY_CURRENT_CONFIG: Más información sobre configuración de hardware, redes y seguridad.     

 HKEY_CLASSES_ROOT: Contiene los tipos de archivos utilizados y su asociación con cada programa en concreto, los directorios dónde están instalados y los comandos de apertura.     

HKEY_USERS: Contiene la información de usuario, como el modo en que tenemos configurado que se presenten las carpetas, los salvapantallas, sonido, etc.     

HKEY_CURRENT_USERS: El mismo tipo de información que el anterior pero, guarda las configuraciones de varios usuarios.     

 Una sección del Registro es un grupo de claves, subclaves y valores del Registro que cuentan con un conjunto de archivos auxiliares que contienen copias de seguridad de sus datos. Los archivos auxiliares de todas las secciones excepto HKEY_CURRENT_USER están en la carpeta %SystemRoot%\System32\Config en Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003 y Windows Vista. Los archivos auxiliares para HKEY_CURRENT_USER están en la carpeta %SystemRoot%\Profiles\nombreDeUsuario. Las extensiones de los archivos de estas carpetas indican el tipo de datos que contienen. A veces, la falta de extensión también puede indicar el tipo de datos que contienen.  

Sección del Registro     

Archivos auxiliares     

HKEY_LOCAL_MACHINE\SAM  Sam, Sam.log, Sam.sav 
HKEY_LOCAL_MACHINE\Security  Security, Security.log, Security.sav 
HKEY_LOCAL_MACHINE\Software  Software, Software.log, Software.sav 
HKEY_LOCAL_MACHINE\System  System, System.alt, System.log, System.sav 
HKEY_CURRENT_CONFIG  System, System.alt, System.log, System.sav, Ntuser.dat, Ntuser.dat.log 
HKEY_USERS\DEFAULT  Default, Default.log, Default.sav 

La siguiente tabla enumera los tipos de datos definidos actualmente que se usan en Windows. El tamaño máximo del nombre de un valor es el siguiente:     

  • Windows Server 2003, Windows XP y Windows Vista: 16.383 caracteres
  • Windows 2000: 260 caracteres ANSI o 16.383 caracteres Unicode
  • Windows Millennium Edition/Windows 98/Windows 95: 255 caracteres

  

Nombre  Tipo de datos 
Valor binario  REG_BINARY 
Valor DWORD  REG_DWORD 
Valor alfanumérico expandible  REG_EXPAND_SZ 
Valor de cadena múltiple  REG_MULTI_SZ 
Valor de cadena  REG_SZ 
Valor binario  REG_RESOURCE_LIST 
Valor binario  REG_RESOURCE_REQUIREMENTS_LIST 
Valor binario  REG_FULL_RESOURCE_DESCRIPTOR 
Ninguna  REG_NONE 
Vínculo  REG_LINK 
Valor QWORD  REG_QWORD 

Leer y escribir en el Registro de Windows desde C#

Para trabajar con el Registro en C#, lo primero que debemos de hacer es agregar un namespace para poder utilizar las clases Registry y RegistryKey, que nos dan acceso a los elementos que intervienen en el control de registros.  Estas clases en conjunto nos permiten trabajar de una manera muy fácil con el Registro.     

Using Microsoft.Win32; 

  

Accesando al registro de Windows y creando Subclaves

Después de haber agregado nuestro namespace, pasamos  a la parte interesante, comenzar a manipular el registro de Windows desde C#, Creamos una Instancia de RegistryKey como se muestra a continuación:     

RegistryKey registryAccess = Registry.Users;

 
Hemos creado nuestra instancia de RegistryKey la cual hemos llamado registryAccess y la hemos inicializado para que sea la subclave HKEY_USERS en el registro, es decir que todos lo métodos que utilicemos afectaran directamente a las subclaves HKEY_USERS y sus datos.     

registryAccess = registryAccess.OpenSubKey(".DEFAULT", true); 

Con la linea de codigo anterior abrimos nuestra subclave “.DEFAULT” que se encuentra dentro de HKEY_USERS con el método OpenSubKey e indicamos si será de solo lectura (false) o lectura/escritura (true).     

Ahora podemos crear una subclave dentro de la subclave superior que es “.DEFAULT”, esto lo hacemos con el código que se muestra acontinuación:     

registryAccess.CreateSubKey("AccessTime"); //Creamos una subclave llamada “AccessTime” 

Una subclave puede contener diferentes tipos de datos que anteriormente fueron mencionados la siguiente linea de codigo muestra como agregar valores a una subclave utilizando el metodo SetValue()     

registryAccess.SetValue("Nombre","Registry in C#", RegistryValueKind.String);

     

Eliminar un subclave utilizando DeleteSubKey() o DeleteSubKeyTree().

registryAccess.DeleteSubKey("AccessTime"); // Borrar una clave vacía 
registryAccess.DeleteSubKeyTree("AccessTime");// Borrar una clave recursivamente, es decir, borra la subclave y todas las subclaves que se deriven de ella

Leer del Registro de Windows

La sentencia mostrada abajo obtiene el nombre de todos los valores en una subkey!     

String[] values = registryAccess.GetValueNames();

O de esta otra forma    

foreach(string Keyname in registryAccess.GetSubKeyNames())
{
 System.Console.WriteLine(Keyname);
}

    

Quizá te interese :

Acerca del autor:

3 Respuestas a “Leer y Escribir en el Registro de Windows desde C#”

  1. Meta dice:

    Hola:

    ¿Cómo sabe que se trabaja en HKEY_USERS si no lo has indicado por ninguna parte?

    Saludo.

  2. Meta dice:

    Lo hice así:

    namespace regedit
    {
    public partial class Form1 : Form
    {
    RegistryKey registryAccess = Registry.Users;

    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    registryAccess = registryAccess.OpenSubKey(“.DEFAULT”, true);
    registryAccess.CreateSubKey(“AccessTime”); //Creamos una subclave llamada “AccessTime”
    registryAccess.SetValue(“Nombre”, “Registry in C#”, RegistryValueKind.String);
    }

    private void button2_Click(object sender, EventArgs e)
    {
    registryAccess.DeleteSubKey(“AccessTime”); // Borrar una clave vacía
    registryAccess.DeleteSubKeyTree(“AccessTime”);// Borrar una clave recursivamente, es decir, borra la subclave y todas las subclaves que se deriven de ella
    }

    private void button3_Click(object sender, EventArgs e)
    {
    String[] values = registryAccess.GetValueNames();
    }
    }
    }

  3. Hola, estuve probando tu codigo pero me sale un error de permisos, estoy usando windows 7 de 64 bits.
    A ver si me puedes ayudar con este problema.

Deja un comentario


Licencia y uso

Las técnicas demostradas en los tutoriales pueden ser utilizadas sin ninguna limitación y tampoco es obligatorio dar una atribución.


Los textos, imágenes y tutoriales son propiedad de sus respectivos autores, nuestro contenido se encuentra bajo licencia Creative Commons Share-Alike.

Escribe algo para el sitio

El escribir un tutorial o un artículo, mandarnos un enlace para Ubicuos, no solamente es una forma de obtener publicidad, si no también de dar algo a la comunidad y nosotros te lo recompensamos con los premios del mes! Leer más de nuestras promociones

¿Sugerencias?

Este es TU sitio, si tienes sugerencias o ideas de cómo podemos mejorarlo para ti, ¡Por favor háznoslos saber!

Hacemos nuestro mayor esfuerzo en proporcionar un sitio útil y amigable y esperamos que disfrutes tu tiempo aquí.

Ayuda a Difundir

Te gusta Ubicuos?

Ve las formas en que nos puedes apoyar.

Apoyando a Ubicuos.com

Submit your linkClose

-->