Introducción. 2
Ficheros .REG. 2
Versiones de ficheros .REG. 3
Convenciones de los ficheros . REG. 3
Limitaciones de longitud. 4
Creación y modificación de claves y valores. 4
Borrar claves y valores. 7
Renombrar claves y valores. 8
Exportar/Importar ficheros.REG. 8
Exportar/Importar de forma interactiva_ 9
Exportar/Importar desde línea de comando_ 9
REG.EXE. 10
Crear claves y valores con REG:EXE. 10
Comparar claves y valores. 12
Copiar claves y valores. 13
Borrar claves y valores. 14
Exportar a ficheros .REG. 15
Importar ficheros .REG. 15
Trabajar con archivos de subárbol del Registro. 16
Exportar un subárbol con regedit (Windows XP/2003) 16
Guardar claves en un archivo de subárbol del registro_ 17
Restaurar claves desde un archivo de subárbol del registro_ 17
Cargar archivos de subárbol del registro temporalmente_ 18
Descargar un subárbol del registro previamente cargado_ 18
Buscar y consultar valores. 19
Uso de WSH para manejo del registro. 20
Agregar y cambiar claves y valores. 20
Eliminación de claves y valores. 22
Leer valores. 23
Archivos INF. 24
Crear claves, crear y modificar valores. 25
Borrar claves y valores. 26
Modificar el nombre de claves y valores. 27
Instalación de un fichero .INF. 28
Apendice – Tipos de Datos del Registro. 28
Referencias. 29
INF_ 30
REG.EXE_ 30
Tipos de datos_ 30
WSH_ 30
Introducción
Cuando necesitamos realizar cambios automatizados de las configuraciones de un equipo (o de varios en una red) de una forma automatizada, es decir no usando un editor del registro (Regedit o Regedt32) hay dos formas útiles de realizar esta tarea, como son las políticas de grupo o usar scripts que realicen estas modificaciones. Menciono las políticas de grupo ya que lo que hacen, en la gran mayoría de los casos, es precisamente establecer valores en el registro (si bien no trata de GPO’s este artículo). En el siguiente enlace tenemos la relación de las directivas y los valores del registro que establecen para Windows 2000:
Windows 2000 Group Policy Registry Table
Nos enfocaremos a como poder manipular el registro desde línea de comandos (y por tanto susceptibles de ser llamados en ficheros .BAT o .CMD), ya sea directamente (como es el caso de REG.EXE) como por medio de comandos llamen a scripts, como cscript.exe. Las formas de manipular el registro desde línea de comandos se basará en las siguientes maneras:
Con ficheros .REG.
Con el programa REG.EXE.
Con WSH (Windows Scripting Host) ya sea con JScript o VBScript.
Con ficheros .INF.
Ficheros .REG
Este es sin duda el modo más conocido de manipular el registro desde línea de comandos. Los archivos de entrada del registro (.REG) son el modo más clásico de actualización de claves y valores del registro. Su principal ventaja es su sencillez, y la posibilidad de utilizar una exportación a fichero de una clave para usarla como «plantilla» a la hora de retocar los valores y claves deseados. Tienen la limitación de no poder renombrar claves o valores (como podemos hacer interactivamente en el editor del registro).
Versiones de ficheros .REG
Existen dos versiones de archivos .REG, la versión 4 y la 5. Estas versiones se diferencian, principalmente, en:
Versión 4 |
Versión 5 |
Efecto |
Uso de ANSI (un byte por caracter) |
Uso de Unicode (dos bytes por carácter) |
Esta diferencia se ve claramente en un editor binario. A destacar que la codificación ANSI afecta a los valores de tipo REG_EXPAND_SZ y REG_MULTI_SZ; un valor 23,A1,03 expresado en versión 4 estaría en versión 5 como 23,00,A1,00,03,00; la conversión del fichero de Unicode a ANSI (y viceversa) no cambiaría estos valores, con lo que el fichero .REG resultante sería erróneo |
Compatibilidad total |
Compatibilidad limitada |
La versón 4 es compatible con todos los sistemas operativos Windows, mientras que la versión 5 sólo es válida con Windows 2000 y posteriores |
Convenciones de los ficheros . REG
Esta es la estructura de in fichero .REG:
<versión>
Línea en blanco
;comentario
[<nombre de clave>]
“nombre de valor”=[tipo:]Dato
La primera línea de un fichero .REG nos indica la versión del mismo:
En la versión 4
REGEDIT4
En la versión 5
Windows Registry Editor Version 5.00
Esta línea de versión es seguida de una línea en blanco.
Si queremos poner comentarios los debemos hacer en líneas comenzadas por punto y coma(;).
En algunas ocasiones será necesario que un mismo dato, de notación binaria, ocupe más de una línea; para hacer esto se escribe una barra de división entera (\) después de una coma de separación de byte y se hace el salto de línea.
[HKEY_CURRENT_USER\Software\MiAplicacion]
«Titulo»=hex(1):4D,00,69,00,20,00,41,00,70,00,6C,00,69,\
00,63,00,61,00,63,00,69,00,F3,00,6E,00,20,00,76,00,20,\
00,31,00,2E,00,30,00
Cuando queremos escribir caracteres especiales debemos quitarles el significado con una barra de división entera (\). Estos caracteres especiales son la propia barra de división entera y las comillas:
En el fichero .REG |
Queda en el registro |
“\\\\servidor\\carpeta” |
\\servidor\carpeta |
“Me gusta \”El Quijote de la Mancha\”” |
Me gusta “El quijote de la Mancha” |
Con todo esto, veamos un pequeño ejemplo de fichero .REG (en este caso en versión 5):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\MiAplicacion]
@=»Esta es mi aplicacion»
«Titulo»=»Mi Aplicación v 1.0»
Limitaciones de longitud
El registro tiene una serie de limitaciones en el tamaño de los nombres de las claves y valores y en l tamaño de los datos. Estas limitaciones las vemos en esta tabla:
Elemento del registro |
Máxima longitud permitida |
Nombre de clave [Todos los SO’s Windows] |
255 caracteres |
Nombre de valor [Windows NT/2000/XP/2003] |
255 caracteres ANSI o 16,383 caracteres Unicode |
Nombre de valor [Windows9x/ME] |
255 caracteres |
Tamaño de dato [Windows NT/2000/XP/2003] |
Límite establecido por la cantidad de RAM disponible |
Tamaño de dato [Windows 9x/ME] |
16,383 Bytes [16 KB] |
Todos los valores contenidos en una clave |
Límite establecido por la cantidad de RAM disponible |
Todos los valores contenidos en una clave |
65,535 Bytes [64 KB] |
Creación y modificación de claves y valores
Para crear o modificar claves y valores se escriben las claves con su nombre y ruta (las claves troncales pueden ser con su nombre completo o abreviado, es decir se puede escribir HKEY_USERS ó HKU) encerradas entre corchetes y los valores como nombre, tipo y dato que contienen. Si una clave o valor no existe se creará, en caso de existir un valor se modificará. Los nombres de claves y valores no se pueden modificar. La sintaxis es:
[<nombre de clave>]
“nombre de valor”=[tipo:]Dato
Parámetros
- : nombre del valor a crear o modificar, encerrado entre comillas. Caso especial es el valor predeterminado de la clave que se escribe como @ sin comillas.
- tipo: tipo de dato. Puede ser dword, en el caso de valores REG_DWORD, hex(código API), o si se omite se considera REG_SZ (cadena simple). Los valores que no son REG_DWORD o REG_SZ se escriben con sus códigos (ASCI o ANSI según la versión 4 ó 5 respectivamente) separados por comas; en caso de que los datos sean muy largos se pueden hacer saltos de línea poniendo una barra de división entera (\) después de una coma. Así pues:
- Un valor REG-SZ se expresa sin tipo:
[HKEY_CURRENT_USER\Software\MiAplicación]
”Titulo”=”Mi Aplicación v 1.0”También puede ser expresado como binario con el tipo hex(1) (en este caso en versión 5):
[HKEY_CURRENT_USER\Software\MiAplicacion]
«Titulo»=hex(1):4D,00,69,00,20,00,41,00,70,00,\
6C,00,69,00,63,00,61,00,63,00,69,00,F3,00,6E,\
00,20,00,76,00,20,00,31,00,2E,00,30,00 - Un valor REG_DWORD se expresa con el tipo dword:
[HKEY_CURRENT_USER\Software\MiAplicacion]
«ValorInicial»=dword:00001024También se puede expresar este tipo como hex(4):
[HKEY_CURRENT_USER\Software\MiAplicacion]
”ValorInicial”=hex(4):24,10,00,00Debemos resaltar que al expresarlo como dword escribimos el valor hexadecimal que queremos quede en el registro; en caso de expresarlo como hex(4) debemos invertir el orden de los bytes, poniendo a la izquierda el primero de la derecha y así sucesivamente; además debemos separar por comas cada byte.
- Un valor de tipo REG_BINARY lo expresaremos con el tipo hex(3) o simplemente lo expresaremos como el tipo hex:
[HKEY_CURRENT_USER\Software\MiAplicacion]
«SeleccionInicial»=hex(3):4d,69,20,61,70,6c,69,\
63,61,63,69,f3,6e[HKEY_CURRENT_USER\Software\MiAplicacion]
«SeleccionInicial»=hex:4d,69,20,61,70,6c,69,63,\
61,63,69,f3,6e - Un valor de tipo REG_EXPAND_SZ se expresa con el tipo hex(2). A pesar de tratarse de una cadena se debe expresar con los códigos ANSI (en versión 4) o códigos Unicode (en versión 5) de cada uno de sus caracteres (señalar que el espacio es 20 en ANSI y 20,00 en Unicode). Así, si al valor DirectorioInicio le asignamos como contenido el dato “d:\MiAplicacion”:
En versión 4:
REGEDIT4
[HKEY_CURRENT_USER\Software\MiAplicacion]
«DirectorioInicio»=hex(2):64,3a,5c,4d,69,41,70,\
6c,69,63,61,63,69,6f,6e,00En versión 5:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\MiAplicacion]
«DirectorioInicio»=hex(2):64,00,3a,00,5c,00,4d,\
00,69,00,41,00,70,00,6c,00,69,00,63,00,61,00,\
63,00,69,00,6f,00,6e,00,00,00 - Un valor de tipo REG_MULTI_SZ se expresa como tipo de dato hex(7) y se siguen las mismas reglas que en el caso de los valores REG_EXPAND_SZ (señalar que el código del salto de línea es 00 en ANSI y 00,00 en Unicode). Así pues, si al valor Lista le ponemos el dato:
Esta es la línea 1
Esta es la línea 2
Esta es la línea 3En versión 4 quedaría:
REGEDIT4
[HKEY_CURRENT_USER\Software\MiAplicacion]
«Lista»=hex(7):45,73,74,61,20,65,73,20,6c,61,20,\
6c,ed,6e,65,61,20,31,00,45,73,74,61,20,65,73,20,\
6c,61,20,6c,ed,6e,65,61,20,32,00,45,73,74,61,20,\
65,73,20,6c,61,20,6c,ed,6e,65,61,20,33,00,00En versión 5 quedaría
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\MiAplicacion]
«Lista»=hex(7):45,00,73,00,74,00,61,00,20,00,65,00,\
73,00,20,00,6c,00,61,00,20,00,6c,00,ed,00,6e,00,65,\
00,61,00,20,00,31,00,00,00,45,00,73,00,74,00,61,00,\
20,00,65,00,73,00,20,00,6c,00,61,00,20,00,6c,00,ed,\
00,6e,00,65,00,61,00,20,00,32,00,00,00,45,00,73,00,\
74,00,61,00,20,00,65,00,73,00,20,00,6c,00,61,00,20,\
00,6c,00,ed,00,6e,00,65,00,61,00,20,00,33,00,00,00,\
00,00 - El tipo de dato REG_RESOURCE_LIST se expresa como tipo de dato hex(8) (el valor que ponemos no es real, pues este tipo de dato va encaminado a recursos de hardware y suelen ser valores demasiado largos):
[HKEY_CURRENT_USER\Software\MiAplicacion]
«ListaRecursos»=hex(8):02,00,00,00,01,00,00,00,00,\
00,00,00 - El tipo de dato REG_FULL_RESOURCE_DESCRIPTOR se expresa como tipo de dato hex(9) (al igual que con los datos de REG_RESOURCE_LIST los datos del ejemplo no son reales debido al gran tamaño que suelen tener):
[HKEY_CURRENT_USER\Software\MiAplicacion]
«DescripcionRecursos»=hex(9):34,35,36,37,38,39,40,\
41,42,43,44,45,46,47,48,49 - El tipo de dato REG_RESOURCE_REQUIREMENTS_LIST se expresa como tipo de dato hex(a) (al igual que con los datos de REG_RESOURCE_LIST los datos del ejemplo no son reales por causa de su tamaño):
[HKEY_CURRENT_USER\Software\MiAplicacion]
«ListaRequerimientos»=hex(a):34,35,36,37,38,39,40,41,\
42,43,44,45,46,47,48,49
- dato: es el dato que contiene el valor.
En el ejemplo que vimos antes la clave (si no estuviera ya creada) HKEY_CURRENT_USER\Software\MiAplicacion, pone de valor predeterminado «Esta es mi aplicación», crea o establece el valor Título como «Mi Aplicación v 1.0»:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\MiAplicacion]
@=»Esta es mi aplicacion»
«Titulo»=»Mi Aplicación v 1.0»
Borrar claves y valores
Para borrar claves y valores se utiliza el guión. Se pone delante del nombre de la clave a borrar (se borrarán todos los valores y claves que contenga). Para borrar valores se les pone como dato (no se especifica tipo) un guión. En caso de que se ponga como dato un guión al valor predeterminado de una clave (@) este quedará vacío (el valor predeterminado no se puede borrar si no se borra la clave). Veamos la sintaxis:
Para borrar una clave:
[-<nombre de clave>]
Para borrar un valor:
[<nombre de la clave en la que está el valor>]
“<nombre del valor>”=-
Para vaciar el valor predeterminado de una clave:
[<nombre de la clave>]
@=-
El ejemplo que vemos a continuación, en versión 4, borra una clave un valor y vacía de contenido el valor predeterminado de la clave ; en concreto la clave borrada es HKEY_CURRENT_USER\Software\MiAplicacion\Preferencias, el valor “Lista”, que está contenido dentro de la clave HKEY_CURRENT_USER\Software\MiAplicacion y se vacía el valor predeterminado de esta misma clave:
REGEDIT4
[-HKEY_CURRENT_USER\Software\MiAplicacion\Preferencias]
[HKEY_CURRENT_USER\Software\MiAplicacion]
@=-
«Lista»=-
Renombrar claves y valores
Como dijimos anteriormente, no se pueden renombrar claves ni valores. Para hacer esto con ficheros .REG es necesario que borremos lo que queramos renombrar y lo recreemos con el nuevo valor.
En el ejemplo que vemos a continuación, en versión 5, se renombra, por no querer un nombre resumido, la clave HKEY_CURRENT_USER\Software\MiAplicacion\Pref, cambiando su nombre a otro completo, más descriptivo, cambiándolo a HKEY_CURRENT_USER\Software\MiAplicacion\Preferencias. También renombramos el valor Tit, contenido en HKEY_CURRENT_USER\Software\MiAplicacion, dándole el nombre Titulo:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Software\MiAplicacion\Pref]
[HKEY_CURRENT_USER\Software\MiAplicacion\Preferencias]
[HKEY_CURRENT_USER\Software\MiAplicacion]
«Tit»=-
«Titulo»=»Mi Aplicación v 1.0»
Exportar/Importar ficheros.REG
Exportar ficheros .REG es algo muy interesante, ya que hay tipos de valores (los binarios) que son bastante incómodos de editar en un fichero .REG. En su lugar es mucho más fácil exportar la rama a un fichero .REG.
Supongamos que queremos homogeneizar las opciones de una aplicación en toda la red (que la aplicación tenga el mismo aspecto y comportamiento en todos los equipos de la red). Para ello podremos usar un equipo como “plantilla” y hacer las modificaciones en él, ya sea desde la misma aplicación o desde un editor del registro (Regedit.exe o Regedt32.exe), pues es más cómodo usar la propia aplicación o un editor del registro para establecer los datos deseados en los valores correspondientes. Una vez comprobamos que está todo como deseamos, podemos exportar la clave del registro de la aplicación a un fichero .REG y éste importarlo en los equipos que queramos. Esto es mucho más rápido y fácil que crear un fichero .REG y además es menos susceptible a errores.
Para exportar/importar una calve del registro utilizamos el editor del registro Regedit. Podemos hacerlo de forma interactiva o desde línea de comandos.
Exportar/Importar de forma interactiva
Para exportar de forma interactiva abrimos el editor del registro Regedit.exe, navegamos por el panel del árbol a la clave a exportar, hacemos click sobre ella, menú “Archivo\Exportar…”. Esto mismo lo podemos hacer con click derecho sobre la clave “Exportar”. Se abre este cuadro de diálogo:
En él podemos elegir el nombre que pondremos al fichero .REG producto de la exportación y la versión en la que se exportará. Con las opciones de abajo a la izquierda podemos seleccionar si se exportará el registro completo (“Todos”) o sólo la rama seleccionada.
Para importar un fichero .REG debemos ejecutar el menú “Archivo\Importar…” y en el cuadro de diálogo seleccionar el archivo e importarlo.
Exportar/Importar desde línea de comando
Podemos Exportar e importar desde línea de comandos usando también el programa Regedit.exe.
Exportar
Para exportar en versión 5 (Unicode) se utiliza el modificador /e
- Para exportar el registro completo:
regedit /e fichero.reg
- Para exportar una clave en concreto:
regedit /e fichero.reg <clave>
Si queremos que la exportación se realice en versión 4 (ASCI) en lugar del modificador /e pondremos el modificador /a (Windows 2000 y posteriores):
- Para exportar el registro completo:
regedit /a fichero.reg
- Para exportar una clave en concreto:
regedit /a fichero.reg <clave>
Ejemplos
- Exportar, en versión 5, la clave HKCU\Software\MiAplicacion:
regedit /e MiAplicacion.reg HKEY_CURRENT_USER\Software\Miaplicacion
- Exportar, en versión 4, la clave HKCU\Software\MiAplicacion:
regedit /a MiAplicacion.reg HKEY_CURRENT_USER\Software\Miaplicacion
Importar
Para importar un fichero .REG usamos la sintaxis:
regedit [/s] fichero.reg
El modificador /s provoca que no se pida confirmación al importar el fichero.
Esta línea importa el fichero MiAplicacion.reg pidiendo confirmación:
regedit MiAplicacion.reg
Esta otra lo importa sin pedir confirmación:
regedit /s MiAplicacion.reg
REG.EXE
En el Kit de recursos incluido en Windows 2000 (en \Support\Reskit) se incluye el programa Microsoft Registry Console Tool: REG.EXE. En Windows XP/2003 viene de forma nativa con el sistema.
REG.EXE realiza muchas operaciones desde línea de comandos, lo que le hace ideal para scripts de inicio de sesión, por ejemplo. Entre estas tareas están: agregar, cambiar, eliminar, buscar, hacer copias de seguridad y restaurar.
Cuando se referencia una clave en REG.EXE no es necesario escribir el nombre completo de la clave troncal en la que está contenida, se pueden usar las abreviaturas HKCR, HKCU, HKLM, HKU y HKCC. Se puede omitir la clave troncal, en cuyo caso se supone que es HKLM (es lo mismo HKLM\Software que solamente Software). En el equipo local se puede actuar sobre todas las claves troncales, pero en equipos remotos sólo se puede actuar en HKLM y HKU.
Crear claves y valores con REG:EXE
Para agregar claves y valores con REG.EXE se debe usar la siguiente sintaxis:
reg add [\\equipo\]clave [{/v valor | /ve}] [/t tipo] [/s separador] [/d dato] [/f]
Parámetros
- equipo: nombre del equipo remoto en el que se actúa (equipo local si se omite).
- clave: nombre completo de la clave con la ruta completa desde la clave troncal que la contiene.
- /v valor: nombre del valor a agregar. Si la clave no existe creará tanto el valor como la clave (con su valor predeterminado no establecido.
- /ve: hace referencia al valor predeterminado de la clave
- /t tipo: tipo de dato. El tipo de dato por omisión es REG_SZ. Los tipo que se pueden utilizar son:
REG_SZ
REG_MULTI_SZ
REG_DWORD_BIG_ENDIAN
REG_DWORD
REG_BINARY
REG_DWORD_LITTLE_ENDIAN
REG_LINK
REG_FULL_RESOURCE_DESCRIPTOR
REG_EXPAND_SZ
- /s separador: carácter al que se asigna el salto de línea en claves REG_MULTI_SZ; si se omite será \0.
- /d dato: dato que contiene el valor.
- /f: Fuerza el reemplazo de claves y/o valores existentes sin pedir confirmación.
Como nos hace suponer el modificador /f, en caso de existir la clave o valor se sobrescribirá, pidiendo confirmación si no se añade /f.
Ejemplos
- Crear la clave HKCU\Software\MiAplicacion con el valor predeterminado no establecido:
reg add HKCU\Software\MiAplicacion
- Crear la misma clave con el valor predeterminado “Esta es mi aplicación”:
reg add HKCU\Software\MiAplicacion /ve /d “Esta es mi aplicación”
- Crea el valor “Titulo” con el dato “Mi Aplicación v 1.0”; en caso de que no existiese la clave la crearía también, con su valor predeterminado sin determinar:
reg add HKCU\Software\MiAplicacion /v Titulo /d “Mi Aplicación v 1.0”
- Crea el valor “Ruta” con el dato %ProgramFiles%\MiAplicación. Si escribimos este dato directamente se escribirá el valor de la variable de entorno %ProgramFiles%; como estamos usando un tipo de dato REG_EXPAND_SZ precisamente para que se almacene el nombre de la variable y no su valor, debemos quitar el significado a los tantos por ciento poniendo ^ delante de cada uno de ellos:
reg add HKCU\Software\MiAplicacion /v Ruta /t REG_EXPAND_SZ /d ^%ProgramFiles%\MiAplicacion
- ¿Qué pasa si la ruta tiene espacio, por ejemplo que sea “Mi Aplicación” en lugar de “MiAplicacion”? En este caso deberemos encerrar entre comillas la parte de la ruta que está detrás del nombre de la variable:
reg add HKCU\Software\MiAplicacion /v Ruta /t REG_EXPAND_SZ /d ^%ProgramFiles%”\Mi Aplicación”
- Crea el valor “Datos” de tipo binario; si existiera este valor reestablece su dato sin pedir confirmación:
reg add HKCU\Software\MiAplicacion /v Datos /t REG_BINARY /d 00112233445566778899 /f
- Crea el valor “Lista” usando el separador de líneas predeterminado:
reg add HKCU\Software\MiAplicacion /v Lista /t REG_MULTI_SZ /d “Esta es la línea 1\0Esta es la línea 2\0Esta es la línea 3”
- Ahora hace lo mismo pero usando como separador ~:
reg add HKCU\Software\MiAplicacion /v Lista /t REG_MULTI_SZ /s ~ /d “Esta es la línea 1~Esta es la línea 2~Esta es la línea 3”
Comparar claves y valores
Podemos comparar dos claves o valores del mismo equipo o de distintos equipo. La sintaxis es:
reg compare [\\equipo1\]clave [\\equipo2\]clave [{/v nombre | /ve}] [{/oa | /od | /os | /on}] [/s]
Parámetros
- equipo1, equipo2: nombre equipo en el que se revisa la clave; si se omite es el equipo local.
- clave1,clave2: nombre y ruta completa de la clave, pudiendo utilizarse abreviaturas para las claves troncales (HKCU, HKLM, etc.); en el caso de especificarse equipos remotos sólo se pueden referenciar las claves troncales HKLM y HKU.
- /ve: compara el valor predeterminado de las claves.
- /v:nombre: nombre del valor que se debe comparar. Se debe encerrar entre comillas si contiene espacios.
- [{/oa | /od | /os | /on}]: especifica la manera en que se muestra el resultado de la comparación:
- /oa: Muestra las diferencias y las coincidencias.
- /od: Muestra sólo las diferencias. Esta es la forma predeterminada de mostrar los resultados de la comparación.
- /os: muestra sólo las coincidencias.
- /on: no muestra nada.
- /s: hace la comparación de forma recursiva (clave y subclaves contenidas).
Ejemplos
- Compara todos los valores de las claves MiAplicacion y Predeterminadas:
reg compare HKCU\Software\ MiAplicacion HKCU\Software\ MiAplicacion\ Predeterminadas
- Compara el valor Version de MiAplicacion y MiAplicacion1:
REG COMPARE HKCU\Software\ MiAplicacion HKCU\Software\ MiAplicacion 1 /v Version
- Compara todas las claves y valores que hay contenidas en MiAplicacion entre los equipos gandalf y el saruman:
reg compare \\gandalf\HKLM\Software\MiAplicacion \\saruman\HKLM\Software\MiAplicacion /s
Copiar claves y valores
Podemos hacer copia de claves y valores. Esto nos puede ser útil a la hora de copiar claves de un equipo a otro o reparar asociaciones basándonos en las de un equipo que las tenga correctas. Al copiar la clave, se copian todos los valores contenidos en ella en la nueva clave. La sintaxis es:
reg copy [\\equipo1\]clave_origen [\\equipo1\]clave_destino [/s] [/f]
Parámetros
- equipo1: equipo origen de la clave a copiar; si se omite es el equipo local.
- equipo2: equipo destino de la clave a copiar; si se omite es el equipo local.
- clave_origen: clave a copiar.
- clave_destino: clave resultado de la copia.
- /s: copia recursiva; todos los valores y claves contenidas en origen se copiarán en destino.
- /f: fuerza la copia sin pedir confirmación.
Ejemplos
- Copia todos los valores y claves de la clave MiAplicacion a MiAplicacion_Backup:
reg copy HKCU\Software\MiAplicacion HKCU\Software\MiAplicacion_Backup /s
- Copia todos los valores de la clave MiAplicacion en la máquina bombadil a MiAplicacion de la máquina local:
reg copy \\bombadil\HKLM\Software\MiAplicacion HKLM\Software\MiAplicacion
Borrar claves y valores
Podemos usar REG.EXE para borrar claves y valores. La sintaxis es:
reg delete [\\equipo\]clave [{/v valor | /ve | /va}] [/f]
Parámetros
- equipo: nombre del equipo remoto (equipo local si se omite).
- clave: nombre completo de la subclave a eliminar o donde se elimina, empezando desde la raíz (se pueden usar abreviaturas: HKLM, HKU, etc.).
- /va: elimina todos los valores de la subclave y el contenido del valor predeterminado.
- /ve: elimina el valor predeterminado de la subclave (más apropiado sería decir que deja sin determinar su contenido, pues el valor predeterminado de una clave no deja de existir hasta que no deja de existir la clave).
- /v valor: elimina el valor de nombre valor de la clave (se debe encerrar entre comillas si incluye espacio/s).
- /f: fuerza a REG.EXE a eliminar las subclaves y valores sin confirmación.
Ejemplos
- Esta línea borra el contenido del valor predeterminado de la clave HKEY_CURRENT_USER\Software\MiAplicacion:
reg delete HKCU\Software\MiAplicacion /ve /f
- Esta línea borra el valor DirectorioInicio de la clave HKEY_CURRENT_USER\Software\MiAplicacion:
reg delete HKCU\Software\MiAplicacion /v DirectorioInicio /f
- Esta línea borra todos los valores de la clave HKEY_CURRENT_USER\Software\MiAplicacion y vacía de contenido al valor predeterminado:
reg delete HKCU\Software\MiAplicacion /va /f
- Esta línea borra la clave del registro HKEY_CURRENT_USER\Software\MiAplicacion con todos sus valores y subclaves:
reg delete HKCU\Software\MiAplicacion /f
- Si quisiéramos borrar una subclave de ella pero sin borrar el resto deberíamos lanzar:
reg delete HKCU\Software\MiAplicacion\Subclave /f
Exportar a ficheros .REG
Al igual que podíamos exportar claves a archivos .REG utilizando regedit.exe (ya sea en forma interactiva o desde línea de comandos), también podemos hacerlo utilizando REG.EXE. La sintaxis es:
reg export clave fichero.reg [/nt4]
Parámetros
- clave : clave a exportar. Se exportará todo lo que contenga esa rama, valores y claves.
- fichero.reg: [ruta y] nombre del fichero al que se exportará. en caso de existir se sobrescribe.
- /nt4: el fichero resultante será en versión 4.
Ejemplos
- Exportar la clave MiAplicacion al fichero MiAplicacion.reg:
reg export HKCU\Software\MiAplicacion MiAplicacion.reg
- Exportar la clave MiAplicacion al fichero MiAplicacion.reg en versión 4:
reg export HKCU\Software\MiAplicacion MiAplicacion.reg /nt4
Importar ficheros .REG
También podemos importar ficheros .REG utilizando REG.EXE. La sintaxis es:
reg import fichero.reg
Parámetro
- fichero.reg: es el nombre del fichero .REG a importar. Se importará sin pedir confirmación, incluso si ya existe/n la/s clave/s y/o valore/s que contiene/n.
Ejemplo
- Importar el fichero MiAplicacion.reg:
reg import MiAplicacion.reg
Trabajar con archivos de subárbol del Registro
Este tipo de archivos es muy interesante, pues contienen claves y valores, si no que también incluyen la información de ACL’s (Access Control List) de las mismas; es decir, no sólo tenemos la información de claves y valores, también tenemos la de permisos. Esto nos permite crear auténticos archivos de respaldo de remas del registro.
REG.EXE, al igual que regedit.exe (en Windows XP/2003) y regedt32.exe (en Windows NT/2000), nos permite generar y leer/utilizar este tipo de ficheros hive , de extensión .hiv (realmente, la extensión no es imprescindible, es más una convención; podemos crear este tipo de ficheros con la extensión que queramos y nos funcionarán igual).
Exportar un subárbol con regedit (Windows XP/2003)
Para exportar un subárbol del registro con regedit, hacemos click sobre la clave en el panel del arbol, menú “Archivo\Exportar…”; esto mismo se puede hacer con el menú contextual que se despliega al hacer click derecho sobre la clave en el panel de árbol y ejecutando exportar. Nos sale el mismo cuadro de diálogo que cuando exportábamos a un fichero .REG:
En éste cuadro de diálogo escribimos el nombre del fichero hive a crear y en el desplegable de tipo seleccionamos “Archivos de subárbol de Registro (*.*)”. Para importar este fichero hacemos click en el panel del árbol sobre la clave a restaurar, menú “Archivo\Importar…” y seleccionamos el tipo (“Archivos de subárbol de Registro (*.*)”) y el fichero e importamos.
Para exportar un subárbol del registro con regedt32, hacemos click sobre la clave en el panel del árbol, menú “Archivo\Guardar clave…” y usamos el cuadro de diálogo de guardar archivo para guardar el archivo hive donde nos convenga (en el desplegable de tipo sólo aparece “Todos tipos los (*.*)” . Para importar un fichero hive, hacemos click en el panel del árbol en la clave a restaurar, menú “Archivo\Restaurar…” y seleccionamos el fichero a restaurar.
Esto mismo lo podemos hacer con REG.EXE, además de otras acciones que podemos hacer con ficheros hive que no podemos realizar con regedit.exe o regedt32.exe.
Nota: Para restaurar una clave, es necesario que ésta ya exista, pues los ficheros hive no crean la clave, la restauran cuando ya es existente; en caso de no existir recibiremos un error.
Guardar claves en un archivo de subárbol del registro
Para guardar una clave en un fichero hive desde REG.EXE, utilizamos la siguiente sintaxis:
reg save [\\equipo\]clave fichero_hive
Parámetros
- equipo: nombre del equipo remoto desde el que se guardará la clave; equipo local si no se especifica.
- clave: clave que se guarda. Se pueden usar abreviaturas; en caso de tratarse de un equipo remoto sólo se podrán usar HKLM y HKU.
- fichero_hive: nombre y ruta del fichero hive en el que se guardará la clave. Si el fichero ya existe se producirá un error.
Ejemplo
- Guardar la clave MiAplicacion en el fichero MiAplicacion.hiv:
reg save HKCU\Software\MiAplicacion MiAplicacion.hiv
Restaurar claves desde un archivo de subárbol del registro
Para restaurar una clave (reiterar que es necesario que ya exista la clave, pues si no dará error) se utiliza la sintaxis:
reg restore [\\equipo\]clave fichero_hive
Parámetros
- equipo: nombre del equipo remoto en el que se restaurará la clave; equipo local si no se especifica.
- clave: clave que se restaura. Se pueden usar abreviaturas; en caso de tratarse de un equipo remoto sólo se podrán usar HKLM y HKU.
- fichero_hive: nombre y ruta del fichero hive desde el que se restaurará el archivo hive.
Ejemplo
- Restaurar la clave MiAplicacion desde el fichero MiAplicacion.hiv:
reg restore HKCU\Software\MiAplicacion MiAplicacion.hiv
Cargar archivos de subárbol del registro temporalmente
Se puede cargar un subárbol del registro desde regedit.exe o regedt32.exe desde el menú “Archivo\Cargar subárbol…” (regedit.exe en Windows XP/2003) o desde el menú “Archivo\Cargar sección…” (regedt32.exe en Windows NT/2000); tendremos que especificar el fichero hive a cargar y, una vez seleccionado se nos pedirá que escribamos el nombre de la clave a crear donde se cargará el subárbol). Al igual que pasaba con restaurar, la clave debe existir previamente. Los cambios que se realizan no son permanentes si no que se pierden al reiniciar el equipo. El uso de esta capacidad está orientado a cargar subárboles en otra ubicación con propósito de solucionar problemas o editar el registro de forma segura (en lugar de retocar la clave original, creamos una clave temporal, modificamos lo necesario y guardamos un nuevo fichero hive o .REG; todo esto lo hemos realizado sin comprometer la clave en la que están los valores “reales”). Destacar que sólo se pueden cargar en carpetas cuya carpeta padre sea HKLM o HKU.
Con REG.EXE también podemos cargar un fichero hive en una clave de forma no permanente. La sintaxis es:
reg load [\\equipo\]clave fichero_hive
Parámetros
- equipo: nombre del equipo remoto en el que se cargará la clave; equipo local si no se especifica.
- clave: clave donde se cargará el archivo hive. Debe hacer referencia a HKLM o HKU únicamente y estar contenida directamente en ellas (HKLM\temp es válido; HKLM\Software\temp no es válido, dará “Error: Acceso denegado”).La clave no debe existir, será creada con esta instrucción.
- fichero_hive: nombre y ruta del fichero hive desde el que se cargará el archivo hive.
Ejemplo
- Carga el fichero MiAplicacion.hiv en HKEY_USERS\temp:
reg load HKU\temp MiAplicacion.hiv
Descargar un subárbol del registro previamente cargado
En el punto anterior vimos cómo cargar archivos de subárbol del Registro desde REGEDIT.EXE, REGEDT32.exe y REG.EXE. La operación inversa (descargar estos subárboles sin necesidad de reiniciar el equipo) la podremos realizar también con estos tres programas.
Para descargar un subárbol con REGEDIT.EXE y REGEDT32.EXE seleccionamos la clave previamente cargada en el panel del árbol y ejecutamos el menú “Archivo\Descargar subárbol…” (REGEDIT.EXE en Windows XP/2003) o el menú “Archivo\Descargar sección…” en Windows NT/2000).
Para hacer esto mismo con REG.EXE esta es la sintaxis:
reg unload [\\equipo\]clave
Parámetros
- equipo: nombre del equipo remoto en el que se descargará la clave; equipo local si no se especifica.
- clave: clave que se descargará. Debe hacer referencia a HKLM o HKU únicamente y estar contenida directamente en ellas (HKLM\temp es válido; HKLM\Software\temp no es válido, dará “Error: Acceso denegado”). La clave será eliminada con esta instrucción.
Ejemplo
- Descargamos la clave HKEY_USERS\temp:
reg unload HKU\temp
Buscar y consultar valores
Podemos usar REG.EXE para que nos muestre los valores contenidos en una clave, en todo un subárbol o un valor en concreto. Para ello usamos el comando QUERY, cuya sintaxis es:
reg query [\\equipo\]clave [{/v valor | /ve}] [/s][/se separador] [/f dato] [{/k | /d}] [/c] [/e] [/t tipo] [/z]
Parámetros
- equipo: nombre de equipo remoto; en caso de omitirse será el equipo local.
- clave: nombre completo de la clave, comenzando en la clave troncal que la contiene (HKLM, HKCU, etc.).
- /v valor: nombre de valor a buscar. Si se omite se devuelven todos los valores contenidos. valor puede ser omitido si se utiliza el modificador /f.
- /ve: búsqueda en valores predeterminados de claves.
- /s: búsqueda recursiva; los valores de todas las claves contenidas se devolverán.
- /se: carácter de salto de línea que especificaremos en valores de tipo REG_MULTI_SZ. En caso de omitirse se considera que es \0. Sólo en Windows 2003.
- /f dato: dato es el dato o el patrón a buscar en el dato. Se devolverán aquellos valores que respondan al dato o patrón. En caso de omitir dato se considerará el patrón *. Sólo en Windows 2003.
- /k: fuerza la búsqueda sólo en nombres de claves. Sólo en Windows 2003.
- /d: fuerza la búsqueda sólo en los datos. Sólo en Windows 2003.
- /c: especifica que la búsqueda es susceptible a mayúsculas y minúsculas. De forma predeterminada la búsqueda no distingue entre mayúsculas y minúsculas. Sólo en Windows 2003.
- /e: fuerza a que sólo se devuelvan resultados que respondan de forma exacta. Sólo en Windows 2003.
- /t tipo: especifica el tipo de valores a buscar. Pueden ser REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ, REG_DWORD, REG_BINARY y REG_NONE. Si no se especifica se muestran todos los tipos. Sólo en Windows 2003.
- /z: hace que se muestre la equivalencia numérica del tipo de dato (REG_SZ=1, REG_MULTI_SZ = 7, etc.). Sólo en Windows 2003.
Ejemplos
- Muestra todos los valores contenidos en MiAplicacion:
reg query HKCU\Software\MiAplicacion
- Muestra todos los valores y claves contenidos en MiAplicacion:
reg query HKCU\Software\MiAplicacion /s
- Muestra el valor predeterminado de la clave MiAplicacion:
reg query HKCU\Software\MiAplicacion /ve
- Muestra el valor Ruta contenido en la clave MiAplicacion:
reg query HKCU\Software\MiAplicacion /v Ruta
Uso de WSH para manejo del registro
Podemos usar Windows Script Host para crear scripts de VBScript o JScript con los que manipular el registro. veremos a continuación las distintas posibilidades, tanto para VBScript como para JScript.
Agregar y cambiar claves y valores
Para agregar o cambiar claves y valores se utiliza el método RegWrite del objeto Shell. En caso de existir una clave o valor se modificará, en caso de no existir se creará. Veamos la sintaxis
- JScript
- VBScript
objeto.RegWrite clave_o_valor, contenido[, tipo]
Parámetros
- objeto: Objeto Shell.
- clave_o_valor: clave o valor a crear. Si es una clave deberá acabar con barra de división entera («\»).
- contenido: si se crea una clave es el contenido del valor predeterminado, si se crea un valor es el contenido del valor. Si la clave o el valor ya existían, cambia el contenido del valor predeterminado o el valor según proceda.
- tipo: REG_SZ, REG_EXPAND_SZ, REG_DWORD o REG_BINARY, cualquier otra provocará que RegWrite devuelva E_INVALIDARG.
Ejemplos
- JScript
- Creación de la clave HKEY_CURRENT_USER\Software\MiAplicacion con el valor predeterminado «Esta es mi aplicación» y con el valor «DirectorioInicio» con el contenido «d:\MiAplicacion»:
var obj_Shell = WScript.CreateObject(«WScript.Shell»);
obj_Shell.RegWrite(«HKCU\\Software\\MiAplicacion\\»,
«Esta es mi aplicación»);
obj_Shell.RegWrite
(«HKCU\\Software\\MiAplicacion\\DirectorioInicio»,
«d:\\MiAplicacion», «REG_SZ»);
- Una vez creados claves y valor anteriores podemos cambiarlos:
var obj_Shell = WScript.CreateObject(«WScript.Shell»);
obj_Shell.RegWrite(«HKCU\\Software\\MiAplicacion\\»,
«Esta es mi aplicación cambiado»);
obj_Shell.RegWrite(
«HKCU\\Software\\MiAplicacion\\DirectorioInicio»,
«d:\\MiAplicacionCambiado», «REG_SZ»);
- VBScript
- Creación de la clave HKEY_CURRENT_USER\Software\MiAplicacion con el valor predeterminado «Esta es mi aplicación» y con el valor «DirectorioInicio» con el contenido «d:\MiAplicacion»:
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
obj_Shell.RegWrite «HKCU\Software\MiAplicacion\», _
«Esta es mi aplicación»
obj_Shell.RegWrite _
«HKCU\Software\MiAplicacion\DirectorioInicio», _
«d:\MiAplicacion», «REG_SZ»
- Una vez creados claves y valor anteriores podemos cambiarlos:
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
obj_Shell.RegWrite «HKCU\Software\MiAplicacion\», _
«Esta es mi aplicación cambiado»
obj_Shell.RegWrite «HKCU\\Software\MiAplicacion\DirectorioInicio», _
«d:\MiAplicacionCambiado», «REG_SZ»
Eliminación de claves y valores
Para borrar una clave o valor se utiliza el método RegDelete del objeto Shell:
- JScript
objeto.RegDelete(clave_o_valor);
- VBScript
objeto.RegDelete clave_o_valor
Parámetros
- objeto: Objeto Shell
- clave_o_valor: Subclave o valor a borrar. Para que se borre una subclave, deberá acabar con una barra de división entera o («\») y si se debe borrar un valor se hará sin la barra de división entera (“\”).
Ejemplos
- JScript
- Este ejemplo borra el valor DirectorioInicio de la clave HKEY_CURRENT_USER\Software\MiAplicacion:
var obj_Shell = WScript.CreateObject(«WScript.Shell»);
obj_Shell.RegDelete
(«HKCU\\Software\\MiAplicacion\\DirectorioInicio»);
- En este ejemplo se procede a borrar la clave HKEY_CURRENT_USER\Software\MiAplicacion:
var obj_Shell = WScript.CreateObject(«WScript.Shell»);
obj_Shell.RegDelete(«HKCU\\Software\\MiAplicacion\\»);
- VBScript
- Este ejemplo borra el valor DirectorioInicio de la clave HKEY_CURRENT_USER\Software\MiAplicacion:
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
obj_Shell.RegDelete _
«HKCU\Software\MiAplicacion\DirectorioInicio»
- En este ejemplo se procede a borrar la clave HKEY_CURRENT_USER\Software\MiAplicacion:
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
obj_Shell.RegDelete «HKCU\Software\MiAplicacion\»
Una limitación es que no se pueden borrar todos los valores contenidos sin borrar la clave, pues los valores habría que ir pasándolos uno a uno y en caso de que no exista uno se produciría un error que interrumpiría el script. Hay dos formas de subsanar este error:
- Usando try y catch en JScript o On Error Resume Next en VBScript. Esto nos obliga a escribir en el script cada uno de los valores que contiene o puede contener la clave. Además, no borraría aquellos valores que no estuviesen en la lista que tengamos en el script.
- Borrando toda la clave y volviendo a crearla posteriormente:
- Jscript
var obj_Shell = WScript.CreateObject(«WScript.Shell»);
obj_Shell.RegDelete(«HKCU\\Software\\MiAplicacion\\»);
obj_Shell.RegWrite(«HKCU\\Software\\MiAplicacion\\»,
«Esta es mi aplicación»);
- VBScript
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
obj_Shell.RegDelete «HKCU\Software\MiAplicacion\»
obj_Shell.RegWrite «HKCU\Software\MiAplicacion\», _
«Esta es mi aplicación»
Leer valores
Podemos leer valores en el Registro usando el método RegRead, del objeto Shell:
- JScript
objeto.RegRead(clave_o_valor);
- VBScript
objeto.RegRead clave_o_valor
Parámetros
- objeto: Objeto Shell
- clave_o_valor: valor a leer. Si queremos leer el valor predeterminado de una clave deberemos escribir el nombre de la clave terminado en barra de división entera (“\”).
Ejemplos
- JScript
- En este ejemplo leemos el valor predeterminado de la clave HKEY_CURRENT_USER\Software\MiAplicacion, almacenandolo en la variable str_ValorPredeterminado:
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
var str_ValorPredeterminado = obj_Shell.RegRead
(«HKCU\Software\MiAplicacion\»);
- En este otro ejemplo se almacena en la variable str_Titulo el dato contenido en el valor Titulo de la clave HKEY_CURRENT_USER\Software\MiAplicacion
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
var str_Titulo = obj_Shell.RegRead
(«HKCU\Software\MiAplicacion\Titulo»);
- VBScript
- En este ejemplo leemos el valor predeterminado de la clave HKEY_CURRENT_USER\Software\MiAplicacion, almacenandolo en la variable str_ValorPredeterminado:
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
str_ValorPredeterminado = _
obj_Shell.RegRead(«HKCU\Software\MiAplicacion\»)
- En este otro ejemplo se almacena en la variable str_Titulo el dato contenido en el valor Titulo de la clave HKEY_CURRENT_USER\Software\MiAplicacion
Set obj_Shell = WScript.CreateObject(«WScript.Shell»)
str_Titulo = obj_Shell.RegRead _
(«HKCU\Software\MiAplicacion\Titulo»)
Archivos INF
Los archivos de información de instalación (INF) permiten realizar tareas como:
- Instalar documentos.
- Personalizar equipos por medio del registro.
- Actualizar componentes.
- Copiar y ejecutar paquetes de instalación.
- Deshabilitar características eliminando archivos.
Su aspecto es parecido al de los archivos REG o INI. Está dividido en secciones, definidas por un nombre encerrado entre corchetes y dentro de cada sección puede haber un número indeterminado de líneas.
Todo archivo INF debe tener una sección [Version] que tiene una única entrada Signature; esto identifica al archivo como INF válido:
[Version]
Signature=$CHICAGO$
Los valores posibles de Signature son:
Valor |
Significado |
$Windows NT$ |
Sistemas operativos de núcleo NT |
$Windows 95$ |
Sistemas operativos Windows 9x/Me |
$Chicago$ |
Todos los sistemas operativos Windows |
Cuando se ejecuta un archivo INF (click derecho sobre él y seleccionar «Instalar») lo primero que hace el sistema es buscar la sección [DefaultInstall], que contiene llamadas a las secciones que contienen las líneas que se ejecutarán. Esto lo realiza por medio de una serie de palabras clave que identifican el tipo de tarea que realizará la lista de secciones (separadas por comas) que tiene asignada. El formato de estas entradas es:
acción=sección[,sección]…
Algunas de las acciones son:
AddReg: Secciones que añaden claves y valores al registro.
CopyFiles: Secciones que copian archivos.
CopyINF: Secciones que copian archivos INF. Sólo disponible a partir de XP, si bien se puede usar en Windows 2000 instalando cocpyinf que viene en el Driver Development Kit en la carpeta \Tools.
DelReg: Secciones que eliminan claves y valores del registro.
DelFiles: Secciones que borran archivos.
Ini2Reg: Secciones que llevan al registro entradas de los archivos INI.
RegisterDlls: Secciones que registran DLL’s.
RenFiles: Secciones que renombran archivos.
UpdateIniFields: Secciones que actualizan los campos en un archivo INI.
UpdateInis: Secciones que cambian líneas de los archivos INI.
UnregisterDlls: Secciones que eliminan el registro de DLL’s.
Es igual el orden en que se escriban las acciones en la sección [DefaultInstall], pues el sistema establecerá el orden según las acciones; DelReg se ejecutará antes que AddReg, por ejemplo.
Una vez vista esta breve introducción a los ficheros INF veremos cómo podemos agregar y quitar claves y valores del registro usando este tipo de ficheros. Recapitulando vemos que necesitaremos definir la sección [Version], la sección [DefaultInstall].
Crear claves, crear y modificar valores
En la sección [DefaultInstall], deberemos crear una entrada de tipo DelReg que apunte a una sección personalizada donde aparecerán las entradas que se ejecutarán para borrar claves y/o valores; a esta sección (en el ejemplo) la llamaremos [CreaEsto]:
[DefaultInstall]
AddReg=CreaEsto
En esta sección [CreaEsto] crearemos una línea por cada clave o valor que queramos crear. La sintaxis es:
clave_troncal, [clave], [valor], [tipo], [contenido]
Parámetros
- clave_troncal: en nombre largos o cortos, es decir HKCR (o HKEY_CLASSES_ROOT), HKCU (o HKEY_CURRENT_USER), HKLM (o HKEY_LOCAL_MACHINE) o HKU (o HKEY_USERS).
- clave: nombre de la clave a crear o que contiene el valor que queremos crear.
- valor: nombre del valor que queremos crear. Si se deja en blanco y se establece un dato en contenido, el dato será el contenido del valor predeterminado de la clave. Si el valor ya existe es modificado (incluso en su tipo).
- tipo: Tipo de dato que contiene el valor expresado en formato numérico hexadecimal, si se omite es de tipo REG_SZ. Puede ser:
Tipo |
Significa |
0x00000000 |
Dato REG_SZ |
0x00000001 |
Dato REG_BINARY |
0x00010000 |
Dato REG_MULTI_SZ |
0x00010001 |
Dato REG_DWORD |
0x00020000 |
Dato REG_EXPAND_SZ |
- contenido: Dato que contiene el valor. Si ya existe el valor se modifica. La forma de expresar los datos depende del tipo. En los tipos de cadena (REG_SZ, REG_EXPAND_SZ y REG_MULTI_SZ) se escriben las cadenas sin más (aun cuando incluyan espacios); en el caso de REG_MULTI_SZ se separan las líneas con una coma.
Ejemplo
- Un fichero INF que creara la clave KEY_CURRENT_USER\Software\MiAplicacion, con el valor predeterminado “Esta es mi aplicación”, el valor Titulo, de tipo REG_SZ, con el dato “Mi Aplicación v 1.0”, el valor Lista, de tipo REG_MULTI_SZ, y el valor Ruta, de tipo REG_EXPAND_SZ, con el contenido %ProgramFiles%\MiAplicacion quedaría así:
[Version]
Signature=$Chicago$[DefaultInstall]
AddReg=CreaEsto[CreaEsto]
HKCU,Software\MiAplicacion,,,Esta es mi aplicación
HKCU,Software\MiAplicacion,Titulo,,Mi Apliación v 1,0
HKCU,Software\MiAplicacion,Ruta,0x00020000,%ProgramFiles%\MiAplicacion
HKCU,Software\MiAplicacion,Lista,0x00010000,Linea 1,Linea 2,Linea 3
Borrar claves y valores
En la sección [DefaultInstall], deberemos crear una entrada de tipo DelReg que apunte a una sección personalizada donde aparecerán las entradas que se ejecutarán para borrar claves y/o valores; a esta sección (en el ejemplo) la llamaremos [BorraEsto]:
[DefaultInstall]
DelReg=BorraEsto
En esta sección que crearemos, pondremos una línea por cada clave o valor a borrar, con la siguiente sintaxis:
clave_troncal, clave[,valor]
Parámetros
- clave_troncal: en nombre largos o cortos, es decir HKCR (o HKEY_CLASSES_ROOT), HKCU (o HKEY_CURRENT_USER), HKLM (o HKEY_LOCAL_MACHINE) o HKU (o HKEY_USERS).
- clave: nombre de la clave a eliminar o que contiene el valor que queremos eliminar.
- valor: nombre del valor que queremos eliminar.
Ejemplo
- Un fichero INF que borrara el valor DirectorioInicio de la clave HKEY_CURRENT_USER\Software\MiAplicacion y que borrase la clave HKEY_CURRENT_USER\Software\MiAplicacion\Preferencias quedaría así:
[Version]
Signature=$Chicago$[DefaultInstall]
DelReg=BorraEsto[BorraEsto]
HKCU,Software\MiAplicacion,DirectorioInicio
HKEY_CURRENT_USER,Software\MiAplicacion\Preferencias
Modificar el nombre de claves y valores
No es posible modificar el nombre de claves y valores desde un archivo INF. Por ello, la forma de hacerlo sería eliminar y volver a crear la clave o el valor a renombrar. Esto puede realizarse perfectamente con un solo fichero .INF, pues, como hemos visto antes, primero se ejecutan las secciones DelReg y después las secciones AddReg, independientemente del orden en que estén escritas en la sección [DefaultInstall].
Es decir, que para eliminar toda la clave y recrearla (pondremos de valor predeterminado «Esta es mi aplicación»):
[Version]
Signature=$Chicago$
[DefaultInstall]
DelReg=BorraEsto
AddReg=CreaEsto
[BorraEsto]
HKCU,Software\MiPrograma
[CreaEsto]
HKCU,Software\MiAplicacion,,,»Esta es mi aplicación»
Si queremos renombrar un valor sin por ello renombrar la clave, tan sólo deberemos borrar éste y recrearlo con el nuevo nombre:
[Version]
Signature=$Chicago$
[DefaultInstall]
DelReg=BorraEsto
AddReg=CreaEsto
[BorraEsto]
HKCU,Software\MiAplicacion,DirectorioInicio
[CreaEsto]
HKCU,Software\MiAplicacion,Ruta,0x00020000,%ProgramFiles%\MiAplicacion
Instalación de un fichero .INF
Un fichero .INF se instala haciendo click derecho sobre él y ejecutando “Instalar”, pero… ¿cómo hacemos para que un fichero INF se instale desde línea de comandos? Pues lo haremos con la siguiente línea:
%SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 ruta_nombre_fichero.INF
Apendice – Tipos de Datos del Registro
REG_BINARY
Datos binarios sin proceso. Según entran, salen. El editor del registro los muestra en notación hexadecimal.
REG_DWORD
Valor de palabra de 32 bits. El editor del registro lo muestra tanto en notación hexadeimal como decimal, pudiendo establecerse de los datos con cualquiera de las dos notaciones.
REG_DWORD_BIG_ENDIAN
Este tipo de valores se carga en memoria con el byte más significativo como primero.
REG_DWORD_LITTLE_ENDIAN
Este tipo de valores se carga en memoria con el byte menos significativo como primero.
REG_EXPAND_SZ
Parecido a REG_SZ pero más potente. Permite almacenar en su contenido referencias a variables de entorno que serán expandidas a su valor por los programas que los leen. Por ejemplo, en un valor REG_SZ almacenamos %ProgramFiles%\MiAplicacion y cuando sea leído el valor por un programa el resultado será c:\Archivos de programa\MiAplicacion.
REG_FULL_RESOURCE_DESCRIPTOR
Almacena una lista de recursos que utiliza un dispositivo.
REG_LINK
Enlace a otras claves existentes (una especie de acceso directo o enlace blando de Unix). Un ejemplo claro es la clave HKEY_CLASSES_ROOT, que es un enlace a HKEY_LOCAL_MACHINE\Software\Classes.
REG_MULTI_SZ
Cadena múltiple (multilínea). De forma interna, el registro separa las líneas con un cero, pero al establecerlo en el editor del registro se usa retorno de carro para saltar de línea.
REG_NONE
Valor que no contiene ningún dato.
REG_QWORD
Palabra de 64 bits.
REG_QWORD_BIG_ENDIAN
Como REG_DWORD_BIG_ENDIAN pero con una palabra de 64 bits.
REG_QWORD_LITTLE_ENDIAN
Como REG_DWORD_LITTLE_ENDIAN pero con una palabra de 64 bits.
REG_RESOURCE_LIST
Agrupa uno o más valores REG_FULL_RESOURCE_DESCRIPTOR como un único bloque de datos binario. Se utiliza para representar la configuración de un dispositivo.
REG_RESOURCE_REQUERIMENTS_LIST
Lista binaria de dispositivos que requiere un dispositivo.
REG_SZ
Valor de cadena no expandible.