Leer y Escribir en el Registro de Windows desde C#
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 :
En todos los programas, la manera de almacenar y recuperar información que perdure en el tiempo ...
Las sesiones, en aplicaciones web realizadas con PHP y en el desarrollo de páginas web en genera ...
Creación de un nuevo proyecto Rails para tu blog Antes de poder hacer cualquier cosa, tiene que ...









Hola:
¿Cómo sabe que se trabaja en HKEY_USERS si no lo has indicado por ninguna parte?
Saludo.
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();
}
}
}
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.