Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Curso 2009-2010
Instalador configurable a travs de ficheros XML, trabajo fin de estudios
de Miguel Maran Grandes, dirigido por Julio Rubio Garca (publicado por la Universidad
de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan ms all de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.
El autor
Universidad de La Rioja, Servicio de Publicaciones, 2012
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
UNIVERSIDAD DE LA RIOJA
Adems, la aplicacin que desarrollaremos deber ser capaz de permitir al usuario que
ejecutar en ltima instancia la instalacin cambiar algunos parmetros del instalador,
as como proporcionar un desinstalador que revierta las modificaciones producidas
por el instalador.
2
2. ndice
2.1. ndice de contenidos
1. Resumen......................................................................................................... 2
2. ndice.............................................................................................................. 3
2.1. ndice de contenidos ......................................................................................... 3
2.2. ndice de figuras y tablas .................................................................................. 5
3. Introduccin.................................................................................................... 6
4. Memoria......................................................................................................... 8
4.1. Documento de Objetivos del Proyecto (D. O. P.) .............................................. 8
4.1.1. Definicin del proyecto ................................................................................ 8
Antecedentes.......................................................................................................... 8
Objetivos del proyecto ........................................................................................... 9
Descripcin del producto ....................................................................................... 9
4.1.2. Alcance del proyecto .................................................................................. 10
Informe del alcance .............................................................................................. 10
Entregables ........................................................................................................... 10
Actividades de apoyo............................................................................................ 11
4.1.3. Recursos humanos, personal y plan de comunicaciones ........................... 11
Conexiones del proyecto ...................................................................................... 11
Plan de direccin del personal ............................................................................. 11
Plan de comunicaciones ....................................................................................... 12
4.1.4. Direccin de riesgos.................................................................................... 12
Fuentes de riesgo.................................................................................................. 12
Sntomas de riesgo ............................................................................................... 13
Cuantificacin de los riesgos ................................................................................ 13
Plan de contingencia............................................................................................. 14
4.1.5. Planificacin del proyecto .......................................................................... 14
Estructura de Descomposicin del Proyecto (EDP).............................................. 15
Listado de actividades .......................................................................................... 16
Calendario de trabajo ........................................................................................... 18
Diagrama de Gantt ............................................................................................... 19
4.2. Anlisis ............................................................................................................ 21
4.2.1. Anlisis de requisitos .................................................................................. 21
4.2.2. Casos de uso ............................................................................................... 23
Definir nombre instalador .................................................................................... 23
Definir archivos a copiar....................................................................................... 24
Definir accesos directos........................................................................................ 25
Definir paquetes ................................................................................................... 26
Definir accesos directos men Inicio y escritorio................................................. 27
Definir usuarios finales ......................................................................................... 28
Definir iconos........................................................................................................ 29
Definir ruta instalacin ......................................................................................... 30
Definir grupo programas ...................................................................................... 31
3
Definir modificacin registro................................................................................ 32
Definir archivos auto-ejecutables......................................................................... 33
Ejecutar instalador................................................................................................ 34
4.2.3. Diagrama de casos de uso .......................................................................... 35
4.3. Diseo ............................................................................................................. 36
4.3.1. Descripcin de la clase Creador_instaladores............................................ 37
4.3.2. Descripcin de la clase Construct............................................................... 38
4.3.3. Descripcin del archivo Make.bat .............................................................. 45
4.3.4. Relaciones entre los archivos de la aplicacin ........................................... 46
4.3.5. Interfaz del usuario creador ....................................................................... 46
Descripcin ........................................................................................................... 46
Precondiciones ..................................................................................................... 48
Poscondiciones ..................................................................................................... 48
4.3.6. Interfaz del usuario final............................................................................. 49
Captura de pantalla .............................................................................................. 49
Descripcin ........................................................................................................... 49
Precondiciones ..................................................................................................... 51
Poscondiciones ..................................................................................................... 51
Diagrama de estados ............................................................................................ 52
4.3.7. Interfaz para el desinstalador..................................................................... 53
4.4. Implementacin .............................................................................................. 54
4.5. Pruebas ........................................................................................................... 60
4.5.1. Pruebas de comprobacin de la funcionalidad .......................................... 60
4.5.2. Pruebas de la interfaz de usuario ............................................................... 64
4.6. Gestin del proyecto....................................................................................... 66
4.7. Conclusiones ................................................................................................... 68
4.7.1. Concordancia entre resultados y objetivos................................................ 68
4.7.2. Lecciones aprendidas ................................................................................. 68
4.7.3. Lneas de ampliacin posibles .................................................................... 69
4.8. Bibliografa ..................................................................................................... 70
4.9. Anexos............................................................................................................. 71
4.9.1. ANEXO I: Manual de instrucciones del usuario creador............................. 71
4.9.2. ANEXO II: Cronologa del Proyecto Fin de Carrera ..................................... 74
4.9.3. ANEXO III: Actas de reuniones.................................................................... 79
4
2.2. ndice de figuras y tablas
Figura 1: Esquema global de la aplicacin........................................................................ 9
Figura 2: Modelo de planificacin .................................................................................. 15
Figura 3: Diagrama EDP .................................................................................................. 16
Figura 4: Calendario de trabajo ...................................................................................... 19
Figura 5: Diagrama de Gantt del trabajo planificado ..................................................... 20
Figura 6: Diagrama de casos de uso ............................................................................... 35
Tabla 1: Elementos y atributos para modificar el registro ............................................. 40
Tabla 2: Claves del fichero de configuracin y su descripcin ....................................... 45
Figura 7: Diagrama de colaboracin entre los ficheros de la aplicacin........................ 46
Figura 8: XML-Schema del fichero Instalador.xml.......................................................... 47
Figura 9: XML-Schema del elemento lugaresInstalacion ............................................... 47
Figura 10: Prototipo de la interfaz del usuario final....................................................... 49
Figura 11: Prototipo de interfaz para cancelar la instalacin ........................................ 50
Figura 12: Prototipo de interfaz para confirmar la instalacin ...................................... 51
Figura 13: Diagrama de estados de la interfaz del usuario final .................................... 52
Figura 14: Prototipo de interfaz para ejecutar el desinstalador .................................... 53
Figura 15: Prototipo de interfaz para confirmar la desinstalacin................................. 53
5
3. Introduccin
El proyecto que queremos desarrollar consiste en la construccin de un creador de
instaladores configurable a travs de un fichero XML, de modo que parte de la confi-
guracin inicial dada por este fichero pueda ser modificada posteriormente por el
usuario que a la postre instalar la aplicacin para la que se construy el instalador.
Las razones por las que he elegido este tema para realizar el Proyecto Fin de Carrera
son tres: por un lado, la posibilidad de colaborar con el Departamento de Matemticas
y Computacin; por otro, la opcin de formar parte del equipo de desarrollo de la
aplicacin para alumnos de matemticas de secundaria TutorMates (este aspecto lo
explicaremos con ms detalle en el siguiente prrafo); y finalmente, mi deseo de em-
barcarme en un proyecto eminentemente tecnolgico y de investigacin que me pro-
porcione una formacin de garantas para el desarrollo de la profesin de ingeniero
informtico.
6
Existen determinadas funcionalidades del creador de instaladores que finalmente no
se considerarn en el proyecto, como es la incorporacin de un soporte multilinge
(hay que tener en cuenta que TutorMates es una herramienta pensada para ser usada
en todo el territorio nacional, por lo que debera estar traducida, al menos, al gallego,
vasco y cataln), una interfaz para el usuario creador de la instalacin o un soporte
multiplataforma, de modo que no slo funcione en Windows. La razn por la que no se
considerarn tales requisitos es la falta de tiempo: la fecha tope de entrega de la me-
moria se ha establecido en julio de 2010, siendo la fecha de inicio octubre de 2009.
7
4. Memoria
En este apartado desarrollaremos el cuerpo de la memoria, uno de los entregables ms
importantes del proyecto.
En este punto se explicarn, entre otras cosas, los antecedentes en los que viene en-
marcado el proyecto, los objetivos que se pretenden y una descripcin del producto
que se desea elaborar con l.
Antecedentes
Este proyecto se realiza para la empresa Addlink Research, S.L., propietaria de la marca
TutorMates, en colaboracin con el Ministerio de Educacin, Geogebra y las universi-
dades de Cantabria y La Rioja. El profesor de la UR Julio Rubio Garca actu como tutor
acadmico del proyecto, mientras que el papel de director del proyecto (y, por tanto,
responsable de todas las decisiones tomadas en l) recay en mi persona.
Se trata de un proyecto clave dentro de este marco, porque de l depende que la ela-
boracin del instalador de la aplicacin utilice herramientas ajenas a la empresa. Por
otro lado, el producto que se espera obtener debera emular (y si fuera posible, mejo-
rar) a alguno de los creadores de instaladores ya existentes (en concreto, a IzPack, ba-
sado precisamente en la configuracin de la instalacin a travs de ficheros XML). Este
hecho permitira la opcin de realizar (si la empresa lo creyera conveniente) el instala-
dor definitivo de TutorMates bajo mi responsabilidad, como algo fuera de proyecto pe-
ro con una cierta remuneracin econmica.
8
4.1.2. Alcance del proyecto
Este proyecto est englobado en otro ms grande, basado en la realizacin de una apli-
cacin que sirva como herramienta de aprendizaje matemtico a los alumnos y profe-
sores de la educacin secundaria: TutorMates. Esta aplicacin deber cumplir los si-
guientes requisitos:
Por otro lado, como hemos explicado ms arriba, la aplicacin deber imitar (o mejo-
rar, en la medida de lo posible) a las herramientas de construccin de instaladores ms
conocidas hoy en da. En concreto, estar inspirada por IzPack, de modo que ambas es-
tn desarrolladas en lenguaje Java y recojan las opciones que puedan estar disponibles
en las instalaciones mediante la lectura de ficheros XML. Un aspecto que nuestra apli-
cacin mejorar con respecto a IzPack es dar la opcin al usuario que instalar el pro-
grama de instalar en su equipo la mquina virtual de Java, necesaria para el correcto
funcionamiento del creador de instaladores, en caso de no disponer de ella.
Entregables
Una vez que el proyecto est terminado y listo para entregar, tendrn que estar finali-
zados los siguientes entregables:
10
Actividades de apoyo
XML.
Java y C++.
JDom.
Swing/AWT (para la interfaz grfica del instalador).
Yo soy el director del proyecto; por consiguiente, las decisiones finales sern tomadas
por m, sea cual sea su naturaleza. No obstante, Julio Rubio aconsejar cuando l lo
considere oportuno o cuando yo lo solicite.
11
Plan de comunicaciones
Las herramientas que se emplearn para la comunicacin dentro del PFC son:
Fuentes de riesgo
12
Sntomas de riesgo
1. Continuos errores que impiden avanzar en el desarrollo del proyecto en las fechas
planificadas.
2. A medida que el proyecto avanza, puede haber un continuo retraso en la finaliza-
cin de paquetes de trabajo que nos haga pensar que tal vez la estimacin de las
fechas que se haba realizado no era la correcta.
3. En tiempo de diseo se realizar una exhaustiva revisin del mismo. Es entonces
cuando se decidir si remodelar el diseo o dejarlo como est.
4. Es sencillo percatarse del incorrecto funcionamiento de las herramientas utilizadas,
pues esto impide por completo la ejecucin de la aplicacin.
5. Sntomas de enfermedad, aparte de los propios sntomas mdicos, pueden ser el
descenso de la productividad y el uso continuo de trabajo excesivo sin poder llegar
a tiempo a las fechas planificadas.
Cada fuente de riesgo tendr una diferente evaluacin: desde una fuente de riesgo po-
tencial cuyo dao se considerar elevado hasta una fuente de riesgo cuyo dao se con-
siderar mnimo.
1. El rumbo del proyecto, debido a los continuos informes semanales del alumno, va a
estar siempre bajo la supervisin de Julio Rubio, por lo que el riesgo en este aspec-
to es pequeo: si Julio Rubio detectara alguna anomala lo suficientemente grave
como para poner en compromiso toda la estimacin realizada, informar de inme-
diato con el fin de que el alumno pueda corregir a tiempo.
2. La estimacin de fechas realizada para las actividades que conforman el proyecto
puede no ser la apropiada. Hay que recordar que el alumno no puede trabajar a
tiempo completo en el proyecto hasta el mes de junio de 2010, de modo que las
horas que dedique al proyecto durante el curso acadmico pueden no ser
suficientes.
3. Un cambio en el diseo a destiempo es un riesgo bastante grave, ya que puede su-
poner que el trabajo de varios meses caiga en saco roto.
4. Podemos suponer que el riesgo relacionado con el uso indebido de las variables de
entorno es de tipo medio-alto, ya que podra suponer la imposibilidad de poder
ejecutar en la mquina afectada el proyecto hasta no descubrir el origen real del
error.
5. Ya que la incapacidad fsica del alumno puede ser prolongada o no, este punto ser
considerado de riesgo medio en el proyecto.
13
Plan de contingencia
Para cada fuente de riesgo identificada se actuar segn lo descrito en este punto.
1. Se pedir una reunin con Julio Rubio con el fin de que pueda reorientar al alumno
segn crea conveniente.
2. Se realizar un cambio en la estimacin de las fechas en el plan del proyecto, inten-
tando que las nuevas sean ms acordes a la realidad que se est observando. Los
motivos por los cuales se habr realizado el cambio sern tomados en cuenta en un
futuro, con el fin de evitar caer en los mismos errores.
3. Si se detectara que el diseo es incorrecto, el alumno realizar los cambios que
estime oportunos antes de comenzar la implementacin.
4. Si se detectaran problemas con las herramientas de software, el alumno deber
tratar de resolverlos en primera instancia, siendo consciente de las posibles fuen-
tes de origen del error. Si despus de un tiempo considerable el alumno no hubie-
ra conseguido solventar sus problemas y adems stos le supusieran un grave im-
pedimento para seguir con la realizacin del proyecto, ser al fin Julio Rubio el que
tomar cartas en el asunto.
5. La principal medida de contingencia frente al agotamiento consistir en ir redu-
ciendo paulatinamente todas las funciones que no se consideren crticas para el
sistema.
La razn por la que se eligi este modo de trabajo es el desconocimiento a priori de las
funcionalidades del IzPack, pues no olvidemos que el objetivo final es la elaboracin de
un creador de instaladores que emule o mejore a ese programa. Estas funcionalidades
se irn descubriendo a lo largo del desarrollo del proyecto, de modo que cada pequea
iteracin dentro de su ciclo de vida deba su existencia a la nueva funcionalidad.
14
PT003 Documentacin
Este paquete contendr toda la documentacin que se precisa para realizar el proyec-
to. En ocasiones, ser necesario realizar alguna investigacin o ser partcipe de algn
tipo de aprendizaje; en esos casos, las actividades de este paquete realizarn dicha
labor.
A0030 Identificacin de fuentes y bsqueda de los datos necesarios.
A0031 Lectura y aprendizaje.
17
PT040 Eleccin de las pruebas
Diseo de las pruebas que se realizarn para comprobar el buen funcionamiento del
sistema, escogiendo los casos ms susceptibles de poseer fallos. Se realizar un listado
de pruebas, detallando en cada una los posibles datos de entrada con sus correspon-
dientes salidas esperadas. Actividades:
A0400 Estudio de los requisitos.
A0401 Listado de las pruebas.
Calendario de trabajo
Puesto que durante el curso 2009/2010 estar estudiando el ltimo curso de la doble
titulacin (Ingeniera Tcnica en Informtica de Gestin + Licenciatura en Matemti-
cas), no podr dedicarme de forma exclusiva al proyecto hasta, por lo menos, el da 21
de junio, momento en el que terminan los exmenes del segundo cuatrimestre. Hasta
esa fecha, mi dedicacin al PFC ser parcial, combinndola con el estudio de las asigna-
turas de los cursos a los que me he referido antes. De hecho, habr periodos en los
que incluso deje de invertir tiempo en el PFC ante la proximidad de los exmenes. Esto,
por tanto, hace que sea muy probable que no pueda terminar el proyecto hasta media-
dos de julio.
18
4.2. Anlisis
21
Por otro lado, el usuario que ejecute la instalacin al final deber ser igualmente capaz
de modificar ciertos parmetros para definirlos como l prefiera, a saber:
Por ltimo, el desinstalador creado deber revertir los cambios producidos en el equi-
po por el instalador de la misma aplicacin, proporcionando al usuario la posibilidad de
conservar el directorio de instalacin y las propiedades de su configuracin incluidas
en los archivos de desinstalacin (en cuyo caso no sern eliminados).
22
4.2.2. Casos de uso
Definir nombre instalador
23
Definir archivos a copiar
24
Definir accesos directos
25
Definir paquetes
26
Definir accesos directos men Inicio y escritorio
27
Definir usuarios finales
28
Definir iconos
29
Definir ruta instalacin
30
Definir grupo programas
31
Definir modificacin registro
32
Definir archivos auto-ejecutables
33
Ejecutar instalador
34
4.2.3. Diagrama de casos de uso
35
4.3. Diseo
En este apartado se describirn las soluciones y los procedimientos que se van a adop-
tar para satisfacer los requisitos descritos en el anlisis, referentes a la aplicacin que
estamos desarrollado: el creador de instaladores. La solucin propuesta ser vlida so-
lo para algunos de los sistemas operativos ms recientes de Windows.
Adems de estos archivos, se debern aportar otros tres ms para obtener la correcta
y completa ejecucin del proyecto. Uno de ellos ya ha sido mencionado: el
Instalador.xml, que se encargar de recoger la informacin de la configuracin de la
instalacin definida por el usuario creador. Puesto que es el propio usuario creador el
que debera encargarse de su edicin, debido a nuestra decisin de no implementar
ninguna interfaz para este usuario, nos veremos obligados a incluir en nuestra aplica-
cin una plantilla (de nombre plantilla.xml) que muestre con la mayor fidelidad posi-
ble la estructura del XML asociado a este archivo (la cual se describe con los ficheros
Instalador.dtd e Instalador.xsd, y con el esquema XML-Schema correspondiente).
36
Otro archivo extra que se incluir es el llamado Make.bat, archivo ejecutable por
lotes de Windows que aadir al CLASSPATH las rutas requeridas para que se ejecute
el programa, ejecutar los archivos iniciales antes descritos (Creador_instaladores.class
y Construct.class) y completar la ejecucin de algunas tareas de creacin y compre-
sin de archivos necesarias para la creacin del archivo que llevar a cabo la instala-
cin definitiva.
Clase que contendr al mtodo principal y leer los datos almacenados en el fichero
Instalador.xml. Por esto ltimo, es necesario que importe las libreras org.jdom,
org.jdom.input y org.jdom.output. Adems, usar la clase SAXBuilder con el fin de car-
gar en memoria el rbol de elementos del fichero XML que necesita leer.
Despus de cargar el XML, la clase gestionar la lectura de los datos pertinentes. stos
sern almacenados en diferentes variables para ser utilizados posteriormente en el
constructor de la clase Construct. Una vez creado un objeto de esta clase, se invocar a
los mtodos que posea, ya que stos sern los encargados de construir el cdigo del
instalador y del desinstalador, as como del resto de archivos que se precisan para
compilarlos, comprimirlos, ejecutarlos, etctera.
37
incluirPrograma (Document) devuelve String: devuelve Yes si el usuario creador
desea ordenar por defecto la creacin de un grupo de programas en el men Inicio
en el que incluir accesos directos; No, en otro caso.
leerUsuarios (Document) devuelve String: devuelve Yes si se desea que la aplica-
cin se instale por defecto para todos los usuarios del equipo; No, si tan solo se
requiere para el usuario que ha iniciado la sesin.
leerDesinstalador (Document) devuelve String: devuelve la ubicacin del icono
con el que se representar el acceso directo del instalador. En caso de que el usua-
rio creador no haya definido ningn icono para el desinstalador, devolver null.
leerRegistro (Document) devuelve List: devuelve una lista con toda la informacin
relativa a la modificacin que se har del registro una vez haya sido iniciada la
instalacin.
leerEjecutables (Document) devuelve List: devuelve una lista con los ejecutables
que se debern inicializar una vez finalizada la instalacin. Estos ejecutables pue-
den ser instalaciones de programas complementarios, ficheros de texto (estilo
readme), etc. Para cada ejecutable, se incluye el programa con el que se deben
abrir dichos archivos (si fuese necesario).
Esta es la clase ms importante de la aplicacin. Sus funciones son las que a continua-
cin se muestran:
Vamos a describir qu hace exactamente cada mtodo de esta clase, comenzando por
el constructor.
38
Constructor:
-Un vector para almacenar qu archivos tendrn acceso directo en el grupo de pro-
gramas que se cree para la aplicacin durante la instalacin, otro para indicar cu-
les lo tendrn en el escritorio y otros tres ms para indicar lo mismo con respecto a
la carpeta de inicio, la carpeta de programas y la carpeta de aplicaciones, todas
pertenecientes al men Inicio. Estos vectores almacenarn un booleano por cada
archivo, que valdr true si el archivo va a tener un acceso directo en el lugar especi-
ficado y false en caso contrario. El orden de representacin de los archivos en estos
vectores coincidir con el que proviene de la lista definida en el constructor; de es-
ta forma, quedar completamente determinado qu booleanos harn referencia a
qu archivos.
-Un vector para almacenar la ruta (en formato String) de los iconos que se usarn
para los accesos directos de estos archivos. Los archivos para los que no se haya
definido ningn acceso directo llevarn un null en su correspondiente componente
del vector.
-Otro vector para indicar la ruta de los archivos dentro del directorio de instalacin.
Esta informacin es til en determinados casos para copiar archivos dentro de un
subdirectorio de la carpeta de instalacin. Nuevamente, si esta informacin no es
necesaria para un determinado archivo, su correspondiente componente en este
vector valdr null.
-Dos vectores ms para almacenar los paquetes de archivos que el usuario final
tendr la opcin de instalar y cules de esos paquetes se instalaran por defecto,
segn la decisin del usuario creador.
39
Por ltimo, el constructor construye las estructuras que almacenarn la informa-
cin sobre la modificacin del registro de Windows. Para ello, comprueba en pri-
mer lugar que el usuario desea modificar el registro a partir del atributo correspon-
diente al fichero XML ledo: si su valor es Yes, construir las estructuras necesa-
rias para almacenar esta informacin; si es No, terminar en ese momento su la-
bor. En caso de que se desee modificar el registro, el constructor contar con un
vector de cadenas de texto cuyas componentes guardarn los datos relativos a los
siguientes elementos y atributos del fichero Instalador.xml:
Esto significa que las componentes 0, 1 y 2 podrn guardar los valores Yes o No
solamente, mientras que el resto almacenarn la cadena que contengan los ele-
mentos del XML indicados en la columna Valor.
generarInstalador:
Estudiemos el cdigo que ejecutar la clase Instalador (es evidente que dicho cdi-
go depender de los datos de configuracin almacenados en la clase Construct y en
el fichero de configuracin install.properties, que veremos ms adelante). En pri-
mera instancia, su mtodo principal guarda los paquetes de archivos de instalacin
y genera los valores (true o false) del vector que determinar qu paquetes se ins-
talarn finalmente. Estos valores sern true al principio y nicamente se cambiarn
a false en el momento en el que el usuario final decida no instalar el correspon-
diente paquete. Lo ltimo que hace el mtodo principal es invocar a la interfaz gr-
fica con la que el usuario final interactuar y que veremos con ms detalle en el
apartado 4.3.6. Interfaz del usuario final.
40
La interfaz grfica llamar al mtodo instalar de la clase Instalador, una vez ha mo-
dificado los atributos de esta clase con los datos introducidos por el usuario final.
Inicialmente, el mtodo crea el directorio de instalacin con sus diferentes subcar-
petas: una con los archivos de la aplicacin, otra con los iconos de los accesos di-
rectos (de nombre Iconos) y otra con el desinstalador (de nombre Desinstalador).
Despus, extrae el fichero de configuracin de la instalacin install.properties del
archivo Instalador.jar y lo aade al jar del desinstalador, Desinstalador.jar, con el
nombre desinstall.properties. Acto seguido, procede a copiar los archivos pertinen-
tes en cada subcarpeta, comprobando antes qu paquetes de archivos deben insta-
larse: los iconos, en Iconos; el jar con el desinstalador, en Desinstalador; y el resto
de archivos definidos, en la subcarpeta restante. Para cumplir con todos estos co-
metidos, la clase cuenta con dos mtodos privados: copiarDirectorio y
copiarFichero, de modo que pueda crear o copiar cualquier directorio, incluyendo
sus subdirectorios y ficheros, de forma recursiva. Tras esto, crea los accesos direc-
tos. Para ello, necesita la ayuda de un programa externo, Shortcut.exe, que permite
la creacin de accesos directos desde la lnea de comandos. Este programa ofrece
muchas funcionalidades, por lo que dispone de muchos parmetros de entrada.
Nosotros usaremos tan solo tres: el que indica cul ser la ruta completa del acceso
directo (incluyendo el nombre), el de la ruta del archivo al que apunta el acceso di-
recto y el de la ruta en la que est situado el icono con el que se mostrar el
shortcut (si ste existiera). Puesto que estamos haciendo uso de un programa aje-
no al propio que se est ejecutando en Java (por tanto, en un hilo diferente del
proceso), hemos de obligar al sistema a esperar a la finalizacin del programa
Shortcut.exe para proseguir con la ejecucin del cdigo de la clase cada vez que se
cree un acceso directo.
Lo mismo sucede con los ejecutables (instalaciones externas, etctera) que se pon-
drn en marcha tras la instalacin: habr que esperar a que termine su ejecucin.
Este ser el ltimo deber de la clase Instalador.
41
Es preciso indicar que los archivos y accesos directos que se crean, as como la mo-
dificacin del registro, dependen de la informacin almacenada en los vectores de-
finidos por el constructor. No obstante, los datos del registro que el usuario crea-
dor define libremente (relativos al elemento customize del fichero XML) y los pro-
gramas que se ejecutan tras la instalacin (provenientes del elemento ejecutable
de Instalador.xml) no quedan recogidos en ningn vector. Esta informacin, que es
almacenada en dos estructuras de tipo List en el constructor, ser extrada directa-
mente de estas listas en el mtodo generarInstalador que acabamos de estudiar.
La razn por la que se ha tomado esta decisin es que las cadenas de texto almace-
nadas se escribirn sin ningn tipo de tratamiento adicional en el fichero
Instalador.java, por lo que no se necesita de ninguna estructura que las recoja. Es-
to no sucede con los dems datos, debido a motivos de comodidad durante el de-
sarrollo de la programacin o al tratamiento y mutacin de la informacin que
representan.
Hay que recordar que aquellos parmetros que puedan ser modificados por el
usuario final no se escribirn de forma directa en el fichero Instalador.java, sino
que sern parametrizados por diferentes variables que lean en tiempo de ejecucin
la informacin almacenada en el fichero de configuracin que se cre a tal efecto.
Los mtodos que se encargan de dar valores a los atributos de la clase Instalador
sern invocados por la interfaz grfica cuando el usuario final inicie la instalacin.
generarDesinstalador:
42
El mtodo desinstalar borra, en primer lugar, todas las carpetas y archivos creados
previamente durante la instalacin de forma recursiva (de modo que es capaz de
eliminar todas las subcarpetas sin tener que hacer referencia a cada una de ellas
explcitamente en el cdigo). Para ello, se ayuda del mtodo recursivo
borrarDirectorio. Este mtodo recibe como parmetro la ruta de un directorio y
elabora una lista con los archivos y directorios que posee. Despus, va recorriendo
uno a uno los elementos de esta lista, de modo que si es detectado como un archi-
vo, lo borra directamente, y si es un directorio, se invoca a s mismo envindolo co-
mo parmetro.
Tras esto, el mtodo principal se encarga de eliminar las claves del registro relacio-
nadas con la aplicacin que se est desinstalando. Tanto estas claves como los ar-
chivos anteriores se han podido detectar gracias a los vectores atributos de la clase
Construct que fueron definidos en el constructor, as como al fichero de configura-
cin creado previamente.
Cabe recordar que, al igual que ocurra con el mtodo generarInstalador, ste tam-
poco escribe directamente los parmetros configurables por el usuario final en el
fichero Desinstalador.java; en su lugar, crea variables que harn referencia a esa
informacin, de modo que la clase cuente con ella en tiempo de ejecucin.
generarEjecutable:
Mtodo que genera el ejecutable .exe que comprimir todos los archivos y ejecuta-
r la instalacin cuando el usuario final ponga el fichero auto-ejecutable en funcio-
namiento mediante doble clic.
43
En primer lugar, el mtodo crea un fichero de nombre arch.cpp. ste comprobar
cuando se inicialice la instalacin si est instalada en el equipo alguna versin de la
mquina virtual de Java, de modo que, de no ser as, instale la Versin 6
Actualizacin 18 en este equipo (detenindose la instalacin hasta que este proce-
so termine). Tras esto, iniciar la instalacin, ejecutando el Instalador.jar.
La razn por la que se eligi el 7-Zip como programa de compresin de los archivos
se debe a la posibilidad que ofrece de crear un archivo auto-ejecutable y auto-
extrable desde la lnea de comandos. Para la correcta ejecucin de este proceso,
es necesaria la existencia de un par de archivos en el mismo directorio de la aplica-
cin que estamos desarrollando: el 7zS.sfx, para crear el auto-extrable, y el
config.txt, donde se le indica al auto-extrable cul es el fichero que debe ejecutar
(en nuestro caso, el Setup.exe, consecuencia de la compilacin del archivo
arch.cpp). Por otro lado, la explicacin de por qu se determin utilizar el lenguaje
de programacin C++ a la hora de componer el arch.cpp se debe a las facilidades
que proporciona C++ para crear archivos ejecutables (algo que en Java es ms
complicado).
generarManifest:
Los ficheros de manifiesto, o manifest, sirven para ejecutar una aplicacin Java
comprimida en un jar. Estos ficheros contienen el nombre de la clase que contiene
al mtodo principal (es decir, la que debe ejecutarse). El mtodo generarManifest
se encarga de la elaboracin de estos ficheros de manifiesto, as como de la compi-
lacin de los ficheros Instalador.java y Desinstalador.java a los que hacen
referencia.
generarInstallConfig:
44
Clave Descripcin
<Nombre_paquete> Paquete a instalar. Puede haber 10 a lo sumo. Tomar valor true
si se desea instalar y false en caso contrario.
Ruta Ruta dentro del sistema en la que se ubicar la carpeta de
instalacin.
Programas Nombre de la carpeta de instalacin y del grupo de programas
de la aplicacin, en caso de que se acabe creando.
Todos Usuarios para los que ser vlida la instalacin. Tomar valor
true si es para todos los usuarios y false en caso contrario.
Inicio Especifica si se crear un nuevo grupo de programas para la apli-
cacin. Tomar valor true si el usuario desea crearlo y false en
caso contrario.
Escritorio Especifica si se crearn accesos directos en el escritorio. Tomar
valor true si as se desea y false en caso contrario. Su valor por
defecto siempre ser true.
45
4.3.4. Relaciones entre los archivos de la aplicacin
La siguiente ilustracin (Figura 7) muestra todas las relaciones que se darn entre los
diferentes archivos que formarn parte del proceso de creacin del instalador.
46
Figura 8: XML-Schema del fichero Instalador.xml
Este otro esquema (Figura 9) recoge la informacin detallada del elemento del XML
lugaresInstalacion presente en el esquema general anterior.
47
Para mayor comodidad, el usuario creador dispondr de una plantilla escrita en len-
guaje XML cuyo contenido ser vlido para el XML-Schema anterior. Las modificacio-
nes introducidas por el usuario creador al editar dicho fichero (que deber nombrarse
como Instalador.xml) debern seguir respetando la especificacin del XML-Schema
aqu descrito.
Precondiciones
Poscondiciones
Por otra parte, la aplicacin deber recoger la informacin introducida por el usuario
creador y guardarla con el fin de mostrarla al usuario final para que pueda ser modifi-
cada (en unos casos) o usarla directamente como parmetro cuando se construya el
instalador (en otros).
Las caractersticas que deber tener el fichero Instalador.xml una vez haya sido edita-
do estn definidas en el manual de instrucciones del creador de instaladores, el cual se
mostrar en el Anexo I de este proyecto.
48
Diagrama de estados
En las siguientes lneas especificaremos con detalle los problemas encontrados y las
soluciones que se llevaron a cabo para solventarlos, as como los aspectos ms impor-
tantes a destacar con respecto a la implementacin.
Una de las principales dificultades que se tuvieron que afrontar (adems, de modo
constante) fue todo lo relacionado con las rutas del PATH y del CLASSPATH, debido,
sobre todo, al desconocimiento que tena acerca de ellos al iniciar el proyecto y a la
falta de experiencia con respecto a su manejo y sintaxis. Esto provocaba que, cada
vez que quera ejecutar una clase Java ubicada en cualquier directorio del sistema
o cualquier programa necesario para el correcto funcionamiento de la aplicacin,
acabara obteniendo un error.
Finalmente, la ruta del PATH se modific en el fichero Make.bat con el fin de poder
utilizar el programa Dev-Cpp para la compilacin y ejecucin del cdigo C++ utiliza-
do en la aplicacin, adems de en el fichero temp.bat para la ejecucin del progra-
ma 7-Zip para la comprensin de los archivos de la instalacin y la creacin del fi-
chero auto-ejecutable. Por su parte, la ruta del CLASSPATH se cambi en el propio
Make.bat con el fin de localizar los .class de la aplicacin y el jdom.jar, necesario
para leer el fichero XML de configuracin.
54
Aunque menor, otro de los problemas que me encontr inicialmente fue la lectura
del fichero XML de configuracin. Como he comentado antes, esto se logr gracias
a JDom. Sin embargo, nuevamente el desconocimiento de esta herramienta provo-
c que aparecieran errores en la aplicacin, debidos sobre todo al hecho de que,
en determinadas ocasiones, trataba de leer subelementos del XML no existentes.
Por ejemplo, si no se inclua en el XML el subelemento desinstalador (porque no
se asignaba ningn icono al desinstalador) y la aplicacin trataba de leer dicho sub-
elemento, se produca un error.
Ante este problema se adoptaron tres posibles soluciones, que se pasan a describir
a continuacin:
o Mantener el subelemento en el XML con una cadena vaca de modo que la apli-
cacin pueda leerlo sin que se produzcan errores, aunque no proporcione nin-
guna informacin.
o Incluir en el elemento padre un atributo (de tipo Yes/No) que indique si hay
que tener en consideracin la informacin almacenada en sus hijos.
o Hacer que la aplicacin lea un subrbol del XML que incluya a los elementos
que puedan omitirse en determinadas ocasiones, de modo que sea la propia l-
gica de la aplicacin la que determine qu elementos son los que finalmente se
incluyen.
La utilizacin de ficheros jar para la ejecucin de los archivos Java compilados oca-
sion que se invirtiera cierto tiempo en investigar acerca de cmo ejecutarlos. Los
ficheros de manifiesto, que pueden entenderse simplemente como ficheros en los
que se indica cul es el archivo en el que se encuentra la clase que contiene al m-
todo principal, son los que subsanaron tal dificultad.
Otro gran problema fue la creacin de los accesos directos. Resulta sencillo crear
un acceso directo en Windows de modo directo (con el ratn, por ejemplo), pero
cmo crear un acceso directo de modo programado desde la lnea de comandos?
En Windows no existe ningn mandato que nos permita realizar tal cosa.
Los accesos directos son, en realidad, archivos que hacen referencia a otro archivo
situado en cualquier ubicacin, caracterizndose por tener extensin .lnk. No obs-
tante, es obvio que para crear un acceso directo no basta con aadir esta extensin
a un determinado archivo, sino que habr que referirse al directorio en el que se
encuentran el archivo base y el icono que representar tal acceso directo.
55
Tras largas horas de investigacin, la solucin vino dada por el uso de un programa
externo capaz de crear accesos directos desde la lnea de comandos, llamado
Shortcut.exe, al cual basta con introducirle como parmetros los comentados ms
arriba.
Las pruebas e investigaciones iniciales mostraron que era poco probable que, bajo
cualquier circunstancia, un archivo jar se pudiera eliminar a s mismo, y que en ca-
so de que fuera posible, sera difcil de conseguir (habra que esperar a que el archi-
vo se cerrara, o bien cerrarlo nosotros mismos, antes de intentar eliminarlo). Por
tanto, la conclusin que se extrajo de esto fue que deba ser necesariamente otro
archivo el que se encargara de eliminar el archivo jar del desinstalador. Ahora bien,
del mismo modo, dicho archivo deba ser capaz de eliminarse a s mismo.
Pues bien, los archivos ejecutables por lotes de Windows (de extensin .bat) tienen
esta propiedad. Por ello, la solucin consisti en la creacin de un script que espe-
rara el tiempo necesario a que se cerrara el archivo jar de desinstalacin, procedie-
ra a borrarlo y despus, se auto-eliminara del sistema. Este script simplemente in-
tentaba borrar el archivo reiteradas veces hasta que ste se cerraba y lo lograba,
momento en el que proceda con su auto-eliminacin.
Hay que indicar que este script es ubicado durante la desinstalacin en el directorio
C:\, debido a que este directorio es muy probable que exista en el ordenador del
usuario final (se trata de la carpeta que contiene habitualmente los archivos del
disco duro de la mquina). Su nombre es destruir.bat.
No solo la eliminacin del propio desinstalador caus problemas. Tambin otros ar-
chivos intermedios necesarios para el correcto funcionamiento de la aplicacin que
deben ser borrados durante el proceso de instalacin ocasionaron contratiempos a
la hora de ser eliminados, debido de nuevo a que la propia aplicacin intentaba bo-
rrarlos antes de que se cerraran. Por razones desconocidas, con determinados ar-
chivos (no todos), la tctica de esperar hasta que stos se cerraran no funcionaba si
se programaba desde Java, por lo que se recurri a su eliminacin desde otro script
(en este caso, el temp.bat).
La modificacin del registro de Windows es otro de los problemas que hubo que
afrontar, no solo por el desconocimiento inicial acerca de para qu se utilizaba y
cmo se poda cambiar, sino tambin por el peligro que conllevaba realizar tal ac-
cin; es recomendable no cambiar ningn valor del registro de cualquier ordena-
dor, salvo que sea estrictamente necesario.
56
La aplicacin deba ofrecer dos maneras diferentes de modificar el registro: a gusto
del usuario o mediante guas, o pistas, que permitieran al usuario creador cambiar
aquellos registros que ms se suelen utilizar a la hora de realizar instalaciones de
programas. Puesto que lo primero se puede entender desde el punto de vista de la
programacin como una generalizacin de lo segundo (para modificar el registro,
hay que indicar siempre la ruta que se desea cambiar, el atributo a cambiar, el tipo
de dato que se introduce y el nuevo valor que tendr el atributo; y esos son los pa-
rmetros que se consideran en el segundo mtodo), hubo que reestructurar parte
del cdigo (ya que, al principio, no se pens en la posibilidad de modificar el regis-
tro a gusto del usuario), de modo que un mismo mtodo Java sirviera para insertar
en el registro datos mediante cualquiera de las dos opciones anteriores. El mtodo
Java que se encarga de tal tarea es la accin insertarEnRegistro.
En caso de que exista alguna versin, system devolver el valor 0; en otro caso, de-
volver un valor distinto de 0. As, podremos distinguir de forma unvoca si real-
mente est instalado Java en el equipo mediante el valor de la variable pid. Note-
mos que el mandato java version muestra la versin actual de Java por consola y,
puesto que esto no debera ser ledo por el usuario final, hemos de redireccionar la
salida a nul.
Tras esto, y solo en caso de que no haya ninguna versin de Java instalada, el cdi-
go C++ ejecuta el instalador de la correspondiente JRE (en el caso de nuestro crea-
dor de instaladores, dicho instalador corresponde a la versin 6 Actualizacin 18).
Por ltimo, independientemente de si Java est instalado, el cdigo C++ ejecuta el
jar del instalador tras esconder la molesta consola que acompaa a sus programas.
Otro aspecto que hubo que corregir est relacionado con el subdirectorio de la car-
peta de instalacin en el que deban copiarse los archivos. En versiones primitivas
del creador de instaladores, los archivos de la instalacin no se podan copiar en
otro sitio que no fuera el directorio de destino, aunque hubiramos querido ubicar-
los en una subcarpeta de dicho directorio al tratarlos de forma individual (por
ejemplo, para hacer un acceso directo a ese archivo en concreto).
57
La creacin del fichero auto-ejecutable que extrae los archivos de la instalacin y la
ejecuta requiri varias horas de investigacin. En un principio se pens que bastaba
con la creacin de un fichero jar que almacenara todos los archivos del programa
que se deban instalar y que ejecutara el instalador que tuviera dentro (lo cual se
habra podido conseguir con un simple doble clic, gracias a los ficheros de manifies-
to). No obstante, se reconsider tal idea, debido a que es posible que el usuario fi-
nal no tenga ninguna mquina virtual de Java instalada en su mquina, o aunque la
tenga, carezca de la nocin de lo que es un archivo jar.
58
Recordemos que un archivo que no tiene ningn paquete asociado se deber insta-
lar obligatoriamente, por lo que nuestra estrategia consistir en suponer inicial-
mente que todos los archivos se van a instalar (aunque la decisin del usuario crea-
dor sea diferente) para despus cambiar el valor del vector de booleanos en las
componentes correspondientes a los archivos cuyos paquetes no se instalarn por
decisin del usuario final. As, en el momento que se confirma la instalacin, la cla-
se InterfazGrafica busca nicamente aquellos paquetes que no se van a instalar y
sus nombres son pasados como parmetro al mtodo setInstPaq de la clase
Instalador para cambiar a false el valor de aquellas casillas del vector de booleanos
que cumplan que su archivo asociado pertenece al paquete introducido como
parmetro.
59
4.5. Pruebas
En este proyecto, debido a sus peculiaridades y a su modo de desarrollo, no ha habido
una nica fase de pruebas, sino que stas han tenido lugar cada vez que se ha disea-
do una solucin para cada nuevo requisito a implementar. En este apartado resumire-
mos los resultados de las pruebas que ms significativas resultaron, as como las modi-
ficaciones que causaron en el cdigo.
Antes de esto, hay que indicar que el resto de pruebas realizadas tuvieron un resultado
satisfactorio. Fueron pruebas para comprobar que
El nombre que iba a tener el instalador era el deseado. Para ello, se modific el
atributo nombre del elemento instalador del fichero XML. Resultado: el archivo
auto-ejecutable que hace las veces de instalador tena como nombre el especifica-
do, con la extensin .exe.
Los accesos directos asociados a algunos de estos archivos se creaban en los luga-
res especificados en los atributos programas, escritorio, inicio, menuInicio
y aplicaciones del elemento origen del XML, as como que estos accesos direc-
tos iban acompaados por el icono cuya ruta quedaba especificada en el subele-
mento icono del elemento origen, siempre que se decidiera que el acceso di-
recto estuviera acompaado por algn icono.
En caso de que se quisiera copiar un archivo que tuviera necesariamente que estar
dentro de alguna carpeta que se hubiera creado en el directorio de la instalacin,
el archivo se copiaba en la ruta adecuada, la cual quedaba completamente deter-
minada por el subelemento destino del elemento origen del XML.
60
Se modificaba adecuadamente el registro de Windows de acuerdo a los valores de
los atributos de los elementos instalacion y desinstalacion y al texto presente
en los subelementos del elemento desinstalacin en caso de que el valor del atri-
buto modificar del elemento registro fuera Yes, y que no se producan cam-
bios en el registro en caso contrario.
La instalacin era vlida para todos los usuarios del equipo en caso de que el atri-
buto todos del elemento usuarios valiera Yes, mientras que solo era vlida
para el usuario actual en caso contrario.
La aplicacin soportaba que hubiera varios elementos del XML del mismo tipo (co-
mo es el caso de los elementos origen, customize y ejecutable) y que funcio-
naba correctamente atendiendo a la informacin residente en cada uno de ellos.
Como hemos indicado antes, la ejecucin de ciertas pruebas dieron lugar a la detec-
cin de algunos errores existentes en la aplicacin que tratbamos de desarrollar en
este proyecto. A continuacin, detallaremos tanto los fallos encontrados como la solu-
cin para corregirlos en ese momento.
61
Prcticamente cada vez que se tena la necesidad de que un fichero escribiera una
determinada ruta en otro fichero, o con menos frecuencia cuando el mtodo prin-
cipal tena que leer alguna ruta del fichero XML de configuracin, al ejecutar el ins-
talador apareca un error (en el primer caso) o ni siquiera se llegaban a compilar
correctamente los archivos Instalador.java o Desinstalador.java (en el segundo ca-
so). La causa del error era el tratamiento especial que en Java se le tiene que dar al
smbolo de la contrabarra (\), ya que se trata de un carcter especial, lo cual haca
que no sirviera introducir las rutas en su formato normal (en las que los directorios
aparecen separados por una sola barra invertida).
Otro problema surgi con los espacios en blanco. En determinadas ocasiones, era
preciso introducir nombres de directorios o rutas completas como parmetros de
programas ejecutados desde la lnea de comandos (por ejemplo, el Shortcut.exe). Si
estos nombres o rutas tenan espacios en blanco, el programa fallaba, pues enton-
ces deberan haber estado encerrados entre comillas. Es evidente que dichos fallos
no fueron detectados hasta que esta clase de programas no se incorporaron al pro-
ceso de desarrollo, aunque se corrigieron de forma sencilla encerrando entre comi-
llas dichos nombres y rutas en los archivos Java correspondientes (aadiendo las
contrabarras que fuesen necesarias, segn el punto anterior, pues las comillas son
tratadas como caracteres especiales).
Los encargados de que el fichero XML de configuracin est definido de modo co-
rrecto con el fin de preservar errores de este tipo en nuestra aplicacin es o bien el
fichero DTD o el fichero XML-Schema, ya que ambos estn asociados al XML con
ese fin. Pero, qu ocurrira si esos ficheros estuvieran mal diseados? Qu pasa-
ra si en ellos se declararan atributos opcionales que en realidad debieran ser obli-
gatorios? La respuesta es que el usuario creador de la instalacin podra dejar sin
incluir estos elementos o atributos en el XML sin que los ficheros DTD o XML-
Schema advirtieran nada, y an as producirse excepciones y errores en nuestra
aplicacin, algo no deseable.
62
Las pruebas que detectaron estos errores consistieron en omitir en el XML parte de
los atributos que, en un principio, eran considerados por el DTD y el XML-Schema
como opcionales. La solucin consisti en declarar como obligatorios aquellos atri-
butos que ocasionaban errores o excepciones por su omisin.
Otro error se produca al no declarar ningn icono para el acceso directo del des-
instalador. La forma de especificar esto en el fichero XML es dejar vaco el subele-
mento icono del elemento desinstalador. No obstante, cuando se haca esto, se
produca una excepcin en tiempo de ejecucin que, an as, no impeda que la
aplicacin se comportara de acuerdo a lo especificado (pues finalmente se cons-
trua el acceso directo).
Lo que produca este error, cuyas causas no fueron fciles de deducir, era en reali-
dad un error de programacin que describiremos en las siguientes lneas.
No solo se han realizado pruebas con esta aplicacin (fKenzo). Tambin se ha tra-
bajado con el programa TutorMates de Addlink Research, S.L. Recordemos que es
posible que nuestro programa sea el encargado de construir el instalador de esta
aplicacin en un futuro.
63
4.5.2. Pruebas de la interfaz de usuario
La solucin que se adopt fue recoger en una variable la ruta con sus directorios
separados por una sola contrabarra y escribir esta representacin de la ruta en el
archivo destruir.bat. Dicha representacin poda conseguirse de forma inmediata
leyendo la ruta directamente del fichero de configuracin install.properties.
El fichero properties tambin ocasion varias dificultades. Una de ellas era la ob-
tencin de sus claves para mostrarlas debidamente en la interfaz de usuario. Resul-
ta que al leer una clave formada por varias palabras de un archivo de propiedades
mediante el mtodo keys(), se devuelve nicamente la primera palabra de la clave
(ignorndose el resto). Esto haca que el nombre de los paquetes no se mostrara de
forma correcta en la interfaz y que se perdiera informacin en el proceso de insta-
lacin de los paquetes.
64
Pero el contratiempo ms importante con respecto al archivo de propiedades fue
el hecho de que, por alguna razn, se aada al jar del desinstalador antes de que
fuera modificado con los cambios producidos por el usuario final tras ejecutar el
instalador, haciendo que el desinstalador nunca obtuviera los parmetros correc-
tos para revertir los cambios en el sistema. Tras algunas pruebas, se comprob que
este error no suceda si los datos del archivo de configuracin se guardaban en otro
archivo distinto al inicial, el install.properties. A este nuevo archivo se le denomin
desinstall.properties, y es realmente este fichero de propiedades el que va a usar
siempre el desinstalador para obtener los datos de la instalacin y llevar a cabo la
desinstalacin de manera correcta.
HWND hide;
AllocConsole ();
hide = FindWindowA("ConsoleWindowClass",NULL);
ShowWindow (hide, 0);
65
4.6. Gestin del proyecto
Tras la finalizacin del proyecto, podemos decir que se han cumplido los plazos previs-
tos para su entrega, pero no la realizacin del nmero de horas estimado para su ela-
boracin. Es decir, a pesar de que finalmente no ha habido ningn retraso, de forma
paradjica tampoco se ha invertido el tiempo total previsto para la realizacin del PFC
(se ha pasado de dedicarle 540 horas a unas 305; esto es, un poco ms de la mitad).
Esto no quiere decir que el proyecto sea deficiente en algn sentido. Las funcionalida-
des que se han implementado representan el grueso de la aplicacin, sus entresijos,
siendo por tanto la parte ms difcil del desarrollo. Esto significa que lo no implementa-
do se refiere a detalles de menos importancia en referencia a la programacin, tales
como:
66
La razn por la que se han invertido un poco ms de la mitad de las horas previstas al
inicio en la realizacin del PFC es simple: su elaboracin ha tenido que ser compagina-
da durante todo el ciclo acadmico con el ltimo curso de la doble titulacin; de ah
que las 3 horas que se pensaban dedicar a esta tarea cada da fuesen demasiadas para
lo que se pretenda hacer. Al final, el tiempo real invertido cada semana acab por no
superar las 8 horas, incluyndose la mayor parte de ellas durante los fines de semana.
He de apuntar que, adems, slo he podido disfrutar de una dedicacin exclusiva a la
realizacin del PFC durante el ltimo mes, tras la finalizacin de los exmenes de junio.
Por otro lado, otras razones por las que no ha dado tiempo a realizar todo lo previsto
pueden ser la falta de experiencia ante un proyecto de tal magnitud y el hecho de usar
herramientas desconocidas para m hasta su comienzo, hndicaps que tuvieron una
gran influencia sobre todo al principio, como es natural.
Aunque bien es cierto que exista la posibilidad de retrasar la entrega del proyecto a
septiembre o incluso al siguiente curso acadmico para mejorarlo, se acab desechan-
do tal opcin, pues prefera dar prioridad a la continuidad de mi formacin acadmica
frente a prolongar ms tiempo el PFC. Por otro lado, tanto Julio Rubio como yo consi-
deramos que se han superado con creces los objetivos ms bsicos del proyecto, sien-
do sta la razn ms sustancial por la que se decidi presentarlo en el momento
actual.
67
4.7. Conclusiones
En lneas generales, los resultados obtenidos satisfacen los objetivos que se determina-
ron al comienzo del proyecto. El creador de instaladores desarrollado es capaz de ofre-
cer al usuario un abanico de posibilidades suficientemente amplio como para crear
cualquier tipo de instalacin con la configuracin que ms le convenga, pues le permi-
te crear accesos directos en los directorios ms utilizados a tal efecto, modificar a su
antojo los valores del registro de Windows (facilitando, incluso, el acceso a las rutas del
registro que cambian con ms frecuencia durante las instalaciones), dar un nombre al
instalador, elegir el directorio de instalacin, crear automticamente un nuevo grupo
de programas, indicar para qu usuarios ser vlida la instalacin, permitir la ejecucin
de instaladores de productos externos inmediatamente despus de la instalacin
Adems de estas funcionalidades y debido al uso que hace de la tecnologa Java, nues-
tro creador de instaladores tambin consigue incorporar una versin de la mquina
virtual de Java (JRE) que se instalar en el equipo del usuario que ejecuta la instalacin
si ste no dispona previamente de ella. Por consiguiente, la aplicacin desarrollada en
este proyecto supera en este aspecto a ciertos creadores de instaladores (como
IzPack), ya que stos no ofrecen esta posibilidad al usuario a pesar de estar implemen-
tados en lenguaje Java. Otro aspecto que consigue mejorar con respecto a IzPack (o,
por lo menos, corregir) est relacionado con la modificacin del registro de Windows:
IzPack tambin satisface este requisito, pero con errores en determinadas ocasiones,
lo que hace que algunos usuarios de este producto desconfen de esa funcionalidad.
Aunque quizs la forma que utiliza nuestro producto para llevar a cabo tal cometido
pueda resultar menos cmoda para el usuario, lo que s se ha comprobado es que es
fiable y libre de errores.
Este proyecto me ha servido, sobre todo, para aumentar mis capacidades de trabajo
de investigacin. Se trata de un proyecto eminentemente tecnolgico, basado en la
realizacin de un producto completamente original y novedoso que, aunque en el fon-
do intente emular a un software ya existente y conocido, ha nacido desde el ingenio y
la bsqueda de ideas que resolvieran las dificultades de implementacin a las que me
he ido enfrentando.
68
En cuanto a la planificacin, este proyecto tambin es muy vlido para apreciar en su
verdadera medida las ventajas que proporcionan las metodologas de desarrollo ms
valoradas en la Ingeniera del Software. En este caso, debido a la naturaleza del pro-
yecto, no ha quedado otro remedio que abordar el desarrollo de la aplicacin sin haber
especificado de antemano todas las funcionalidades que era preciso implementar, lo
cual result muchas veces incmodo y arriesgado, pues a la hora de implementar nue-
vos requisitos era muy probable que hubiera que hacer cambios adicionales en el c-
digo, aumentando la probabilidad de que se produjeran errores o de que no los encon-
trramos. Adems, estos cambios en el cdigo suponan un esfuerzo extra difcil de
medir a priori y que causaban demasiada inseguridad en el programador, el cual tena
que disponer de la valenta y el coraje suficientes como para modificar el cdigo escri-
to asumiendo los anteriores riesgos. Todas estas dificultades no habran tenido lugar si
la metodologa usada hubiera especificado todos los requisitos desde el principio.
Por supuesto, cabe recordar que el proyecto puede mejorarse implementando las fun-
cionalidades que proporciona IzPack y que finalmente no se consideraron por falta de
tiempo. En concreto, estas funcionalidades han quedado recogidas en el apartado 4.6,
Gestin del proyecto.
69
4.8. Bibliografa
1) Juan Diego Gutirrez Gallardo: Manual imprescindible de XML. Anaya Multimedia,
2005.
70
4.9. Anexos
4.9.1. ANEXO I: Manual de instrucciones del usuario creador
INSTRUCCIONES DE USO:
1) En la misma carpeta que se proporciona (la que contiene el Make.bat) se aaden los
archivos que se utilizarn durante la instalacin: iconos, carpetas que se copiarn,
programas o instalaciones externos que se deben ejecutar en el transcurso de la
instalacin...
Atributos:
Atributos:
inicio: indicar "Yes" si se desea que el programa se cargue al arrancar Windows; "No",
en caso contrario.
Subelementos:
71
archivo: ruta del archivo (dentro de la carpeta del creador de instaladores) que se
copiar en la carpeta de destino. Los subdirectorios se separan mediante \\ (esto ser
vlido para cualquier ruta de aqu en adelante en este documento).
icono: ruta del icono (si existiera) que se asociar al archivo anterior (en caso de que
admitiera un acceso directo). Si un archivo para el que se va a crear un acceso directo
no tiene ningn icono asociado, este elemento puede dejarse vaco u omitirse.
destino: til solamente si se desea copiar un archivo dentro de una carpeta que se
instalar en el directorio de destino. Por ejemplo, si se desea copiar la carpeta
<miCarpeta> en el destino de modo que esta carpeta contiene una subcarpeta llamada
<subCarpeta> que a su vez contiene el archivo <miapp> y deseamos copiar este ltimo
archivo dentro de la anterior subcarpeta, hemos de escribir en "destino" lo siguiente:
<miCarpeta>\\<subCarpeta>. Si no consideramos el subdirectorio <subCarpeta> en el
anterior ejemplo, bastara con escribir <miCarpeta>. Por ltimo, si el archivo <miapp>
no se encuentra dentro de ningn directorio, el subelemento "destino" debe omitirse
(o dejarse en blanco).
Atributos:
incluir: "Yes" si se desea crear un grupo de programas dentro del men Inicio. El
nombre del grupo sera el mismo que se indica en el elemento "programas" (es decir,
el de la carpeta de instalacin). "No", en caso contrario.
Atributos:
Los elementos instalacion y desinstalacion tienen como atributos las claves de registro de
instalacin y desinstalacin de Windows. Adems, desinstalacion incluye subelementos
en los que se muestran los valores de algunas de esas claves (si son distintos de "Yes" o
"No").
Atributos:
tipo: tipo de dato del valor que se introducir en el registro. El tipo por defecto es
REG_SZ.
72
valor: Cadena que se almacenar en la clave indicada del registro.
Elemento usuarios: indica si la aplicacin se instalar para todos los usuarios o solo para el
actual.
Atributos:
todos: valor "Yes", para todos los usuarios; valor "No", slo para el actual.
Subelementos:
icono: Guarda la ruta del icono que se mostrar con el acceso directo del
desinstalador. En caso de no existir tal icono, el elemento debe dejarse vaco.
Atributos
prog: guarda el programa con el que debe abrirse el ejecutable o instalador, en caso de
que sea necesario.
3) Se modifica la variable del sistema PATH con la ruta del directorio bin de la JDK de Java
que est instalada en su equipo. Por ejemplo, si tiene instalada la versin 1.6.0_17 en el
directorio "Java" de "Archivos de Programa", escriba en la lnea de comandos:
Es necesario que su equipo disponga de la JDK de Java para que funcione esta aplicacin.
4) Se ejecuta Make.bat.
73
4.9.2. ANEXO II: Cronologa del Proyecto Fin de Carrera
Por otro lado, comienzo a estudiar por mi cuenta el lenguaje XML (el cual hasta
ahora es desconocido para m), ya que ser imprescindible para llevar a cabo el PFC
(los creadores de instaladores han de ser configurables precisamente a travs de fi-
cheros XML). (5 horas).
8/10/2009: Siguiendo con mi iniciacin en XML, me hago con un libro que ensea
las nociones ms bsicas: XML: Manual imprescindible, de Juan Diego Gutirrez
Gallardo. Con esto, aprendo la utilidad de XML para guardar y organizar los datos
(7 horas).
Otro problema, muy ligado al anterior, era que el sistema no encontraba la ruta del
javac.exe, debido a una incorrecta configuracin de la variable de entorno
CLASSPATH. Tras resolver esto, el fichero .bat se ejecutaba sin presentar ms difi-
cultades. Por ltimo, apuntar que el modo de copiar el fichero en el directorio fue
a travs de la creacin de un bfer de datos, el cual lea una determinada cantidad
de bytes del fichero para escribirlos en el fichero de destino (3 horas).
25/10/2009: Consigo que la aplicacin lea de un fichero XML tanto el nombre del
archivo que se quiere instalar como la ruta de la instalacin, as como el nombre
que se desea que tenga el instalador. Esto slo fue posible tras la instalacin de
JDom en mi equipo, vlido para facilitar el acceso a ficheros XML que deben ser le-
dos por programas en Java. Adems, consigo crear desde el programa el .bat referi-
do anteriormente, el cual compila y ejecuta el instalador (5 horas).
74
13/11/2009: Realizo mi primer instalador mediante IzPack. Dicho instalador se en-
carga de instalar una pequea aplicacin en Java en los directorios que se le dictan.
El objetivo de aprender a manejar IzPack se debe a dos razones: conocer con ms
profundidad la funcionalidad de este programa para aplicarla a mi creador de insta-
ladores y crear el instalador definitivo de TutorMates, si la empresa decidiera que
lo haga yo (lo cual supondra una remuneracin econmica por esta labor). (6
horas).
Con el fin de crear la primera instalacin en IzPack fue necesario obtener los cono-
cimientos ms bsicos acerca de los ficheros jar (cmo crearlos y cmo ejecutarlos,
por ejemplo), ya que la propia instalacin se ejecuta a travs de estos ficheros (3
horas).
1/12/2009: La aplicacin permite instalar varios archivos (no solo uno) tanto en la
ruta especificada como en el men Programas, de modo que en el escritorio,
adems, se pueda instalar una copia del archivo principal de la aplicacin (5 horas).
75
12/12/2009: Las copias de los ficheros en el escritorio o en el men Programas son
sustituidas por accesos directos, lo cual permite ahorrar una gran cantidad de espa-
cio en memoria. Para lograr esto, tuve que investigar acerca de cmo crear en
Windows estos accesos directos. Necesit para ello la ayuda de una herramienta,
llamada shortcut.exe (5 horas de investigacin ms 6 horas de implementacin y
pruebas).
25/12/2009: El creador de instaladores permite que todos los archivos que se utili-
zarn en la instalacin (iconos, ficheros jar, etctera) puedan estar ubicados en
cualquier subdirectorio de la carpeta en la que se encuentra (y no necesariamente
en la misma carpeta), siempre y cuando esto se indique adecuadamente en el fi-
chero XML del que se leen las caractersticas de la instalacin (2 horas).
o HKLM\Software\<Programa>
Install_Dir (opcional)
o HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<Programa>
DisplayIcon (opcional)
DisplayName
DisplayVersion (opcional)
HelpLink (opcional)
InstallLocation
NoModify (opcional)
NoRepair (opcional)
UninstallString
URLInfo (opcional)
(3 horas de investigacin + 6 horas de implementacin).
76
12/02/2010: El creador de instaladores permite ejecutar archivos externos a la ins-
talacin, tales como ficheros de texto (tipo readme) o incluso otros instaladores (de
programas que pueden ser necesarios para que el que queremos instalar funcione
correctamente). (4 horas).
77
1/04/2010: Se crea un XML-Schema que representa, de un modo ms grfico del
que se podra lograr con un DTD, la estructura que debe tener el fichero XML de
configuracin (2 horas).
26/06/2010: Se documentan las pruebas del proyecto (5 horas). Por otro lado, se
realizan las ltimas pruebas, encaminadas a determinar la correcta funcionalidad
de la aplicacin, lo cual causa modificaciones tanto en el cdigo como en los fiche-
ros DTD y XML-Schema (3 horas).
7/07/2010: Se implementa la interfaz del usuario creador. Para ello, fue necesario
hacer el diseo de la interfaz (8 horas); construir la interfaz en Swing (10 horas); in-
vestigar acerca de cmo mostrar un rbol de directorios para que el usuario final
pueda elegir la ruta de la carpeta de instalacin (3 horas), para ocultar la consola
de C++ (3 horas), para centrar en la pantalla la ventana (2 horas) y para incluir una
barra de progreso en la interfaz (aunque despus no se consiguiera poner en mar-
cha) (5 horas); programar la funcionalidad de la interfaz (16 horas); realizar los
cambios pertinentes en el cdigo para crear el archivo de propiedades
install.properties (6 horas) y realizar la fase de pruebas (7 horas).
78