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 鈥淎ccessTime鈥澛
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 :
聽 聽 El control TreeView se utiliza para mostrar datos jer谩rquicos, como una tabla de conteni ...
Leer archivos XML desde C# XML, siglas en ingl茅s de Extensible Markup Language (lenguaje extens ...
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 鈥淎ccessTime鈥
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();
}
}
}