universidad de sevilla escuela superior de...

221
UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin de Carrera Ingeniería de Telecomunicación Aplicación de Instalación del Entorno de Trabajo Discovery Carlos Velo Carrasco Tutor: Susana Hornillo Mellado

Upload: others

Post on 07-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

UNIVERSIDAD DE SEVILLA

Escuela Superior de Ingenieros

Proyecto Fin de Carrera

Ingeniería de Telecomunicación

Aplicación de Instalación del Entorno de Trabajo Discovery

Carlos Velo Carrasco

Tutor: Susana Hornillo Mellado

Page 2: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin
Page 3: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

Índice de Contenidos:

1. Introducción y Situación Inicial. ...................................................................1

1.1 Descripción de la empresa y su situación en el mercado..........................1

1.2 ¿En qué consiste el entorno de trabajo Discovery? ..................................2

1.3 Problemas a solventar con este proyecto. ................................................3

1.4 Soluciones adoptadasàAsignación del proyecto......................................4

2. Fase de Investigación..................................................................................5

3. Fundamentos de la Aplicación Web. ...........................................................9

3.1 Interfaz de Usuario, el Navegador...........................................................11

3.2 Capa de negocio, COM+.........................................................................12

3.3 Capa de Datos, Base de datos. ..............................................................12

4. Análisis de los componentes a instalar:.....................................................13

4.1 Aplicación COM+. ...................................................................................13

4.2 Aplicación IIS. .........................................................................................23

4.3 Base de Datos.........................................................................................31

4.4 Infomap. ..................................................................................................35

4.5 Ficheros Ejecutables. ..............................................................................35

4.5.1 Satcom Configuration. ......................................................................35

4.5.2 Satcom Wavecom MODEM. .............................................................36

4.5.3 Satcom GPRS. .................................................................................36

4.5.4 Satcom TrakM8 FTP Client. .............................................................36

4.6 Otros. ......................................................................................................36

5. Elección de una herramienta de trabajo para la aplicación: Visual Basic..38

6. Desarrollo de la Aplicación de instalación del entorno de trabajo

Discovery. .........................................................................................................40

Page 4: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

6.1 Aplicación de Instalación.........................................................................42

6.1.1 Formularios.......................................................................................43

6.1.1.1 frmSetUp. ...................................................................................43

6.1.1.2 frmLicense..................................................................................45

6.1.1.3 frmProductKey. ..........................................................................47

6.1.1.4 frmSelection (Instalación modo Servidor). .................................49

6.1.1.5 frmIdentity (Instalación modo Servidor).....................................53

6.1.1.6 frmDatabaseSelection (Instalación modo Servidor). ..................55

6.1.1.7 frmMSDE2000Finish (Instalación modo Servidor). ....................56

6.1.1.8 frmSetUpInServer (Instalación modo Servidor)..........................58

6.1.1.9 frmBrowser y frmFolderName (Instalación modo Servidor).......62

6.1.1.10 frmExeFiles (Instalación modo Servidor). ................................63

6.1.1.11 frmClientInstallation (Instalación modo Cliente) .......................66

6.1.1.12 frmClientInstallation2 (Instalación modo Cliente). ....................69

6.1.1.13 frmPJSoftLicenseFiles y PJSOftBrowser (Instalación modo

Cliente)...................................................................................................70

6.1.1.14 frmIISServerName (Instalación modo Cliente). ........................72

6.1.1.15 frmFinish y frmFinishWithoutInstall. .........................................73

6.1.2 Módulos. ...........................................................................................76

6.1.2.1 Módulo Principal (Main Module).................................................76

6.1.2.2 Módulo EditRegistry. ..................................................................77

6.1.2.3 Módulo EncrypFile. ....................................................................78

6.1.2.4 Módulo Reboot...........................................................................78

6.1.2.5 Módulo SerialNumber. ...............................................................79

6.1.2.6 Módulo VersionVerify. ................................................................80

Page 5: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

6.1.2.7 Módulo de Clase IISVirtualDirectory. .........................................80

6.2 Aplicación de encriptación.......................................................................82

6.2.1 Formulario frmEncryp. ......................................................................82

6.2.2 Módulo EncrypModule. .....................................................................84

6.3 Aplicación del Código de Desbloqueo.....................................................85

6.3.1 Formulario frmProductKeyMaker. .....................................................85

6.4 Creación del CD de Instalación. ..............................................................87

6.4.1 Directorios y Subdirectorios..............................................................88

6.4.1.1 Directorio Com. ..........................................................................88

6.4.1.2 Directorio DLL´s & OCX´s: .........................................................89

6.4.1.3 Directorio EXEFILES..................................................................90

6.4.1.4 Directorio Icons. .........................................................................91

6.4.1.5 Directorio IISFOLDER................................................................91

6.4.1.6 Directorio MSDE. .......................................................................91

6.4.1.7 Directorio PJSoft License...........................................................92

6.4.1.8 Directorio SATCOMADDONS. ...................................................93

7. Instrucciones Post-Instalación. ..................................................................94

7.1 SQL Server o MSDE 2000. .....................................................................94

7.2 Satcom Configuration..............................................................................95

7.3 Satcom Trakm8 FTP Client. ....................................................................96

7.4 Satcom GPRS. ........................................................................................98

7.5 Satcom Wavecom Modem. .....................................................................99

8. Conclusiones. ..........................................................................................101

9. Anexos.....................................................................................................103

9.1 Código de la Aplicación de Instalación..................................................104

Page 6: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

9.1.1 Formularios.....................................................................................104

9.1.1.1 frmSetUp. .................................................................................104

9.1.1.2 frmLicense................................................................................106

9.1.1.3 frmProductKey. ........................................................................108

9.1.1.4 frmSelection (Instalación modo Servidor). ..............................110

9.1.1.5 frmIdentity (Instalación modo Servidor)....................................114

9.1.1.6 frmDatabaseSelection (Instalación modo Servidor). ................123

9.1.1.7 frmMSDE2000Finish (Instalación modo Servidor). ..................125

9.1.1.8 frmSetUpInServer (Instalación modo Servidor)........................126

9.1.1.9 frmBrowser (Instalación modo Servidor). .................................133

9.1.1.10 frmFolderName (Instalación modo Servidor)..........................135

9.1.1.11 frmExeFiles (Instalación modo Servidor). ..............................136

9.1.1.12 frmClientInstallation (Instalación modo Cliente). ....................141

9.1.1.13 frmClientInstallation2 (Instalación modo Cliente). ..................144

9.1.1.14 frmPJSoftLicenseFiles (Instalación modo Cliente). ................145

9.1.1.15 frmPJSOftBrowser (Instalación modo Cliente). ......................147

9.1.1.16 frmIISServerName (Instalación modo Cliente). ......................148

9.1.1.17 frmFinish. ...............................................................................151

9.1.1.18 frmFinishWithoutInstall...........................................................153

9.1.2 Módulos. .........................................................................................154

9.1.2.1 Módulo principal (MainModule). ...............................................154

9.1.2.2 Módulo EditRegistry. ................................................................171

9.1.2.3 Módulo EncrypFile. ..................................................................179

9.1.2.4 Módulo Reboot.........................................................................181

9.1.2.5 Módulo SerialNumber. .............................................................184

Page 7: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

9.1.2.6 Módulo VersionVerify. ..............................................................189

9.1.2.7 Módulo de Clase IISVirtualDirectory. .......................................191

9.2 Código de la Aplicación de Encriptación. ..............................................200

9.2.1 Formulario frmEncrypt. ...................................................................200

9.2.2 Módulo EncrypModule. ...................................................................201

9.3 Código de la Aplicación del Código de Desbloqueo..............................204

9.3.1 Formulario frmProductKeyMaker. ...................................................204

9.4 TRANSACT-SQL y OSQL/ISQL............................................................205

9.5 Visor de API´s y declaración de API´s en VisualBasic. .........................209

9.6 Ejemplo de funcionamiento de la función CheckVersion.......................211

10. Bibliografía. ..........................................................................................213

Page 8: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin
Page 9: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

1

1. Introducción y Situación Inicial.

1.1 Descripción de la empresa y su situación en el

mercado.

Satcom Technology LTD es una compañía irlandesa encargada

fundamentalmente al seguimiento y vigilancia de flotas de vehículos, entrando

en su mercado sobre todo los vehículos involucrados en el transporte de

mercancías peligrosas, transporte de mercancías altamente valiosas, coches

de lujo y cualquier vehículo en general que necesite de una vigilancia adicional.

Está situada en Cork, ciudad del sur de Irlanda y segunda ciudad más

grande después de Dublín; además de disponer de otra sede en el Reino Unido.

Desde ambas oficinas abarca a gran cantidad de clientes a lo largo de ambos

países, siendo unas de las empresas más punteras y que más ha crecido en el

ámbito de la ingeniería e I+D en los últimos diez años.

Su actividad es muy diversa, abarcando muchos campos de la ingeniería, e

ideal como destino de un ingeniero de telecomunicaciones, donde puede

desarrollar conocimientos en campos como electrónica, programación

(telemática) y señales. Para que esto se vea con más claridad voy a pasar a

resumir de modo superfluo la actividad de la empresa a la que concierne este

proyecto.

La empresa se encarga del seguimiento y vigilancia de flotas de vehículos y

para ello primero se coloca un dispositivo hardware en cada vehículo. Este

dispositivo consta fundamentalmente de un receptor GPS que localiza el

vehículo y de un MODEM GSM/GPRS que nos permite interactuar con él,

además de diversos sensores que constituirán el sistema de alarma. Satcom

no fabrica estos dispositivos, sino que los compra por partes como cajas

negras y los conecta creando la solución final, del mismo modo que se encarga

de conectarlo a las diferentes partes del vehículo en cuestión. Es por esto que

Page 10: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

2

el conocimiento de la electrónica es fundamental en el día a día en esta

compañía.

Una vez instalado el hardware en el vehículo, se le debe instalar al cliente

en su oficina, casa o lugar de trabajo el software necesario para poder

monitorizar y gestionar las alarmas de su vehículo o flota de vehículos

(aplicación Discovery). Con lo que se trata de crearle un completo entorno de

trabajo desde el cual pueda tener acceso a la configuración de su flota y pueda

estar al tanto a tiempo real de lo que ocurre en cada momento. Para lo cual se

requieren conocimientos en el ámbito de la programación de aplicaciones,

bases de datos y páginas Web, etc. Y por supuesto y debido a que todas las

comunicaciones con los vehículos se realizan por vía GSM/GPRS y la

localización por GPS, el dominio de estas materias constituye la base de todo

el proyecto.

1.2 ¿En qué consiste el entorno de trabajo Discovery?

Discovery es un complejo sistema diseñado para que el cliente pueda

disponer de una completa información y control sobre su flota de vehículos a

tiempo real.

Consiste en una aplicación Web, que permite al usuario monitorizar la

situación de su vehículo, localizarlo vía satélite por GPS y mediante GSM o

GPRS mandar las órdenes oportunas para la gestión de las alarmas.

Además, permite elaborar un informe de la situación del vehículo que desvele

la ruta seguida y los eventos que se quieran conocer, como pueden ser el

exceso de velocidad, los tiempos de parada, etc.

Para que el cliente pueda localizar su vehículo se incluye un software de

mapeo que nos permite avistar el mismo en un nivel de detalle de gran calidad,

pudiéndose encontrar a la unidad en cualquier calle de toda Europa. Para lo

cual, y debido al constante cambio de las ciudades, los mapas son fácilmente

actualizables.

En la siguiente figura se puede apreciar el entorno de trabajo Discovery en

funcionamiento.

Page 11: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

3

Figura 1.2. Entorno de Trabajo Discovery en funcionamiento.

1.3 Problemas a solventar con este proyecto.

La empresa necesitaba una actualización de la solución software que se le

instala a los clientes, de manera que se mejoren ostensiblemente las

propiedades de esta aplicación y que resulte un sistema robusto y fiable que se

adecue a las necesidades de los clientes.

Hasta entonces y debido a la complejidad del sistema a instalar, era

necesario el desplazamiento de un ingeniero hacia la oficina del cliente para

configurarle toda la aplicación, lo cual conllevaba los consecuentes gastos de

desplazamiento y en algunos casos de alojamiento. Situación que se trataba de

solventar con mi trabajo en este proyecto.

Page 12: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

4

1.4 Soluciones adoptadasàAsignación del

proyecto.

Así pues, frente a esta necesidad de renovación se estudió el proyecto de

hacer una aplicación de instalación del entorno de trabajo Discovery de manera

que el cliente tuviera una aplicación personalizada y fácil de instalar. Esta

solución ya la había afrontado anteriormente la empresa, pero debido a la

complejidad del proyecto todo se quedo en las primeras investigaciones.

La tarea a desarrollar se presentaba bastante difícil, no tanto a la hora de

programar la aplicación de instalación, que ya de por si es una tarea más que

compleja, sino también en la elección de los componentes a instalar y en la

personalización de estos, ya que una de las directrices de la empresa es la de

crear soluciones para cada cliente.

Así pues, se decidió hacer una investigación previa de los componentes a

instalar con Discovery, de los prerrequisitos que se le pedirían al cliente y de

las posibles configuraciones con las que estos podrían tener sus sistemas.

Page 13: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

5

2. Fase de Investigación.

Ante la complejidad del proyecto se tuvo que desarrollar primero un estudio

previo que englobase tanto todos los componentes que se debían instalar,

como los sistemas que nos podríamos encontrar en el cliente. Y así empezar a

planificar de manera correcta, y con el menor número de equívocos posibles la

solución adecuada.

Esto nos llevó unos 30 días de investigación en los cuales tuvimos que

instruirnos en muchas materias y en los que tuvimos que adelantarnos en la

medida de lo posible a las posibles dificultades que nos encontraríamos más

adelante, para así escoger el camino correcto para una solución satisfactoria.

Desde un principio teníamos claro que la aplicación se debería adecuar a

las diversas configuraciones de las que podía disponer el cliente, con lo que

enfocamos el estudio en hacer una implantación del sistema en forma de

módulos independientes, para que así el cliente se instalará sólo lo que

necesita en cada ordenador. Por ejemplo, si estamos proveyendo de un

sistema de seguimiento a un solo individuo con un coche de lujo, este

probablemente dispondrá únicamente de un ordenador desde donde gestionar

su vehículo, por lo que todo el sistema Discovery irá instalado en su ordenador.

Pero también nos podemos encontrar con la situación en la que el cliente sea

por ejemplo una empresa de transporte, por lo que en su oficina tendrá una red

de ordenadores conectados y un servidor; en este caso tendríamos que

considerar el dividir la instalación en dos: la instalación en el servidor y la

instalación en los diferentes ordenadores.

En el servidor iría todo el grueso de la aplicación como son la base de datos,

la comunicación con el MODEM GSM/GPRS, etc., de manera que éste se

encargaría de distribuirlo a cada ordenador particular de la red y de facilitar

todo el potencial de Discovery.

Por otro lado tendríamos la instalación en los distintos ordenadores de la

red, donde nos limitaríamos a instalar el software de mapeo y a crear un enlace

con el servidor para acceder a las demás virtudes de Discovery.

Page 14: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

6

Para acometer esto se decidió que la solución debía ser a modo de

aplicación Web de manera que se pudiera colocar en el Intranet de la empresa,

y de ahí ser utilizado por todos los ordenadores de la red de forma

independiente pero siempre compartiendo los pilares básicos que serían

proveídos por el servidor. Para acceder a Discovery se utilizará un cliente Web

o navegador, que decidimos que fuera el Internet Explorer, ya que es el que

tiene más difusión y viene incluido con los sistemas operativos Windows.

Además se tendría que modificar algunas de las propiedades de dicho

navegador para que así no hubiera conflictos con la aplicación.

Satcom Technology es una empresa del ámbito de la seguridad que provee

de sistemas de alarma a clientes de muy diversa índole, ya sea a particulares o

grandes empresas de transporte de mercancías peligrosas o incluso al

transporte de explosivos. Es por ello que la confidencialidad debe ser extrema,

de manera que nadie ajeno a los acuerdos entre la empresa y los clientes

pueda hacerse con los servicios del entorno de trabajo Discovery. Por ello se

tendría que diseñar un sistema de identificación del cliente y una manera de

impedir que ningún extraño se pueda instalar la aplicación. Asimismo Satcom

tendría que tener constancia de cada cliente y del número de instalaciones que

éste realiza en su entorno de trabajo.

Por otro lado la aplicación de instalación debe ser moldeable a las

necesidades de cada cliente, es decir clientes con diferentes necesidades

tendrán instalaciones diferentes. Así que estas distinciones también las

tendremos que salvar de posibles intrusiones utilizando algún tipo de algoritmo

de codificación o encriptado. Esto implica que la aplicación deberá ser

fácilmente adaptable y actualizable, ya que a clientes diferentes tendremos que

mandar aplicaciones de instalación diferentes, con lo cual no tendremos que

crear una nueva aplicación para cada uno, sino sólo modificar un par de

ficheros de configuración a los que accederá la aplicación y actuará en

consecuencia.

Todo el sistema deberá estar cimentado en una base de datos que

almacene todo lo concerniente a las unidades que se tratan de gestionar, así

Page 15: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

7

como los informes que éstas generen. Esta base de datos deberá ser instalada

en el servidor en caso de que éste esté ubicado en un lugar diferente, y ser

compartida y proveída por éste. Además ésta debe ser modificable según las

necesidades del cliente y por tanto debe aparecer encriptada.

Para poder localizar los vehículos se tendrán que instalar un software de

mapeo que nos provea de calidad suficiente capaz de distinguir entre calles

pequeñas en los lugares más remotos. Dicho software, en caso de la

instalación en una red, deberá ir alojado en cada uno de los ordenadores ya

que dependerá de la actualización del mapa que se quiera usar, además del

sistema operativo de cada ordenador.

Esta aplicación de mapeo debe ser fácilmente actualizable, de manera que

el cliente pueda elegir entre un tipo de mapas u otros. Aun así se deberá

instalar un sistema de mapeo por defecto, un sistema suficientemente bueno

para que el cliente estándar no tenga en principio ninguna queja de calidad y

por tanto se quede satisfecho con dicha instalación.

Asimismo se debe dar la posibilidad al cliente de instalar ciertas

aplicaciones creadas por Satcom, aplicaciones fundamentales para el correcto

funcionamiento de Discovery y que en instalaciones en redes de ordenadores

irán en el servidor.

Estas aplicaciones son una herramienta de configuración post-instalación,

un programa para mandar ordenes por medio de un MODEM GSM, un

programa para la gestión de la comunicación GPRS y otro para la

carga/descarga vía FTP de las unidades. De entre ellos sólo la herramienta de

configuración se instalará siempre, los demás dependerán de si el cliente opta

por contratar los servicios de Satcom bajo GPRS o sólo vía GSM.

Así pues, tras este periodo de investigación previa llegamos a gran cantidad

de útiles conclusiones que nos allanarían el terreno a la hora de implementar la

aplicación de instalación de Discovery y que seguiríamos como guía de

nuestros pasos. Concretando, estas conclusiones se pueden resumir en los

siguientes puntos:

Page 16: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

8

- Dividir la instalación en dos partes: instalación en servidor e instalación

en cliente. En el caso de que el cliente sólo disponga de un ordenador

se instalarán ambas en el mismo.

- La solución será una aplicación Web, de manera que irá instalada en la

Intranet de la empresa.

- Uso del navegador Internet Explorer para acceder a Discovery y

modificación de algunas de su propiedades.

- Incluir un sistema de identificación de los usuarios fiable de manera

que se sepa que empresa y cuantos de sus ordenadores tienen

instalado Discovery.

- Desarrollar un sistema de encriptado que asegure la confidencialidad

de los datos de la aplicación de instalación.

- Se deberá incluir una base de datos fácilmente modificable a las

necesidades del cliente y que aparezca de forma encriptada en la

aplicación para evitar posibles intrusiones.

- Elegir e instalar un software de mapeo de calidad.

- Instalar siempre la aplicación de configuración post-instalación y dejar

como optativo la instalación de otras aplicaciones (GSM, GSM/GPRS,

FTP).

Page 17: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

9

3. Fundamentos de la Aplicación

Web.

Tras la fase de investigación, nos centramos en el desarrollo de la

aplicación Web y de los componentes que ésta introduce en nuestro proyecto

de instalación.

Para ello optamos por desarrollar una aplicación Web con una arquitectura

distribuida. Una aplicación distribuida utiliza los recursos de múltiples máquinas

por medio de la separación de la funcionalidad de la aplicación en grupos más

manejables de tareas. El hecho de dividir las aplicaciones en partes tiene

grandes beneficios entre los cuales se encuentran la reutilización y la

escalabilidad.

Dividir una aplicación de este modo da lugar a la aparición de ciertas capas,

cada una responsable de una parte del proceso global de la aplicación. El

estudio de estas capas supone los cimientos de lo que será nuestra aplicación

y por tanto merece más que una mera mención aunque sean unos conceptos

mayormente teóricos.

Las aplicaciones en capas se caracterizan por la cantidad de capas por las

que pasa la información desde la capa de datos donde estos están

almacenados (normalmente una base de datos) hasta la capa de presentación

que será la que visualizarán los clientes. La importancia de la arquitectura

distribuida está en que cada una de estas capas puede estar situada en

sistemas/ordenadores diferentes.

Cuando el número de capas es dos, estamos frente al típico modelo

cliente/servidor. Este tipo de arquitectura funciona muy bien cuando se trata de

una pequeña empresa con un conjunto limitado de recursos y con pocas

expectativas de crecimiento en el volumen de datos a tratar. Pero desde

Satcom se da servicio a todo tipo de empresa, desde un único particular con su

ordenador personal hasta grandes multinacionales donde la distribución de sus

recursos informáticos son totalmente escalables. Y por tanto no se podrían

suplir a estos clientes si se escogiera una arquitectura cliente/servidor.

Page 18: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

10

Frente a las aplicaciones de dos capas optamos por un modelo de 3 capas.

Donde en términos meramente teóricos existe una capa de servicios de usuario

o de presentación, una capa de servicios de negocio que se encarga de las

funciones que desempeña la aplicación en sí y una capa de servicio de datos.

Figura 3. Representación de un modelo de 3 capas.

La principal diferencia entre un modelo de 2 capas o cliente/servidor y un

modelo de 3 capas, está en que la lógica de negocio se separa del interfaz de

usuario y de la fuente de datos. Esta capa de servicio de negocio consiste en

todas las funciones y métodos que resuelven las funcionalidades de la

aplicación, es decir, si estuviéramos hablando por ejemplo de una aplicación

Web que tratara de gestionar los asuntos económicos de una empresa,

encontraríamos que la lógica de negocio englobaría funciones como el cálculo

del IVA, suma de beneficios, cálculo del descuento pronto-pago, etc.

En nuestro caso, este nivel o capa contiene funciones y métodos que

resuelven la gestión de las alarmas, el añadir o quitar un vehículo dentro de

una flota, el cálculo de la dirección hacia la que se dirige el vehículo, la gestión

de las rutas, etc.

La capa de datos concentra lo que es la estructura de los datos y su

almacenamiento. Lo que viene a ser la base de datos.

La capa de servicio de usuario constituye el interfaz que el cliente dispone

para acceder a los datos y modificarlos, es decir la página Web en si misma

que le permite realizar la gestión adecuada de su flota. Por medio de está

empleará la capa de negocio para acceder a los datos.

Page 19: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

11

Con este tipo de aplicación con arquitectura de 3 capas, el cliente nunca

debe acceder directamente al sistema de almacenamiento de datos sino que

debe hacerlo a través de la capa intermedia de negocio para así asegurarse la

corrección de los datos.

La separación de los distintos aspectos de la aplicación en 3 capas permite

que cualquiera de ellas pueda ser modificada de forma independiente sin tener

que cambiar las otras. Esto nos permitirá concentrarnos en cada parte por

separado y por tanto aumentará la eficacia del desarrollo de la aplicación.

Llegado a este punto, nada más queda identificar cuales serán nuestras tres

capas y que utilidad tendrán éstas. Utilizaremos como interfaz principal de

usuario al navegador. La información de nuestra aplicación Web fluirá desde el

servidor hasta el cliente usando el protocolo HTTP. Nuestro servidor de

aplicaciones será Internet Information Server de Microsoft funcionando tanto

como servidor Web y como servidor de aplicaciones. Nuestra lógica de negocio

y el acceso a los datos estarán encapsulados dentro de componentes COM+ y

servirán como conectores que enlazan con las partes de nuestra aplicación. Y

finalmente, nuestra capa de datos será una base datos SQL.

3.1 Interfaz de Usuario, el Navegador.

El interfaz de usuario se presenta dentro de un navegador Web. Nuestra

elección fue la de Internet Explorer debido sobre todo a su amplia difusión, ya

que viene incorporado dentro de la instalación por defecto de los sistemas

Windows.

La comunicación entre el cliente y la aplicación es crítica para el diseño y la

implementación de la aplicación. El protocolo de transporte de hipertexto

(HTTP) define como se gestiona en el servidor el requerimiento de información

realizado por el cliente usando el navegador y después el cómo se manda esta

información.

Como servidor de la aplicación Web tendremos Internet Information Server

(IIS) de Microsoft, que sostendrá una aplicación desarrollada usando Active

Page 20: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

12

Server Pages (ASP). Con el uso de ASP como “lenguaje” de desarrollo Web,

ganamos en solidez y dinamismo de nuestra solución, ya que el uso de ASP

nos permite dar soporte a la lógica de negocio dentro de nuestro código y

acceder a la base de datos usando los componentes COM+ pertinentes.

3.2 Capa de negocio, COM+.

Toda la funcionalidad de Discovery, sus funciones y métodos que resuelven

las distintas situaciones que el cliente requiere con su uso, están englobadas

en componentes COM+. La separación del acceso a datos y de la lógica de

negocio dentro de componentes hace posible que la aplicación sea más fiable y

que pueda atender mayores requerimientos con mayor facilidad. Estos

componentes son compilados antes de su ejecución con lo que el rendimiento

de la aplicación mejora ya que no se compilan durante el tiempo de ejecución

de Discovery. Esta mejora del rendimiento supone una mayor carga que podrá

soportar la aplicación.

3.3 Capa de Datos, Base de datos.

El pilar básico de nuestra aplicación está en los datos y en su estructura.

Dicha organización debe ser fácilmente moldeable y ampliable, de manera que

quede prevista la posible ampliación en la empresa cliente en cuanto a

volumen de datos a tratar, como son la incorporación de nuevas flotas de

vehículos.

En cuanto a la herramienta para desarrollar la base de datos la elección

escogida ha sido el uso de SQL Server de Microsoft, una potente herramienta

que permite completa interacción con las otras capas.

Page 21: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

13

4. Análisis de los componentes a

instalar:

Discovery es un complejo entorno de trabajo que no se podría entender sin

una explicación previa de los componentes que lo constituyen. En este

apartado se describirá cada uno de estos elementos y cómo actúan dentro de

la aplicación.

Cada uno de estos componentes se tendrá que incluir y configurar en la

aplicación de instalación de Discovery, objeto de este proyecto.

4.1 Aplicación COM+.

Por medio de COM+ podemos diseñar todo lo concerniente a la capa de

negocio que nos permitirá desarrollar las funcionalidades de Discovery.

Para llegar a entenderlo primero es preciso definir el concepto de

componente. La definición literal de componente es: objeto que contiene código

para manipular datos, y que suministra acceso a ese código por medio de un

conjunto bien especificado de servicios disponibles de manera pública. Lo que

en palabras más prácticas viene a significar que un componente es un

fragmento de código encapsulado que realiza alguna función para una

aplicación. Como ejemplo un componente puede ser algo tan simple como una

suma entre dos números dados o algo tan complicado como queramos hacerlo.

En nuestro caso englobará, entre otras, las funciones necesarias para la

recuperación de la correspondiente información de la base de datos para su

posterior uso en la aplicación Web y su posible modificación cuando el cliente

así lo requiera.

Con el uso de componentes, la programación de aplicaciones de tres o más

capas se hace una tarea mucho más sencilla, ya que COM+ se encargará de

todas las relaciones entre los componentes y entre estos y el sistema operativo.

Page 22: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

14

COM significa Component Object Model (modelo de objeto componente) y

consiste en un modelo de objetos desarrollado por Microsoft e implementado

en todas las plataformas Windows. Forma la base de todas las aplicaciones

desarrolladas para Windows para casi todas las interacciones con el sistema

operativo por medio de interfaces definidas por la propia COM. Define un

estándar para la interoperabilidad de componentes, es decir, la capacidad de

los componentes para interactuar entre sí. No especifica el lenguaje con el que

se programan dichos componentes, simplemente especifica como deben

comunicarse los componentes entre sí y con el propio sistema operativo. Con

lo que deja un amplio abanico de posibilidades al programador para que

desarrolle los componentes usando el lenguaje con el que se encuentre más

cómodo. Gracias a los estándares de comunicación entre componentes que

especifica COM, los componentes pueden ser reutilizados sin ninguna

dependencia del lenguaje con el que fueron escritos. No importa si una

aplicación contiene componentes escritos en Visual Basic, C++ o Java siempre

y cuando estos componentes sigan la especificación de COM.

COM+ es la segunda generación de COM que Microsoft empezó a distribuir

a partir del lanzamiento de Windows 2000. Incluye nuevos rasgos que hacen

de COM más fácil de utilizar y simplifica el desarrollo de aplicaciones

distribuidas por capas.

En términos generales se puede decir que COM+ es un conjunto de

servicios que combinan COM con Microsoft Transaction Server (MTS) que a

grandes rasgos gestionaba el tiempo de vida de los componentes.

Una vez clarificada la funcionalidad que queremos que tenga COM+ en

nuestra aplicación, y una vez programados nuestros diferentes componentes

debemos descubrir la manera de instalar dichos componentes en la máquina

del cliente. La herramienta que Microsoft nos da para gestionar nuestras

aplicaciones COM+ es el Explorador de Servicios de Componentes, que se

puede encontrar a partir de Windows 2000 en la carpeta “Herramientas

Administrativas” en el menú de inicio, herramienta que se puede utilizar para

crear nuevas aplicaciones COM+, y para agregar componentes a las

aplicaciones ya creadas. Las aplicaciones COM+ no son más que conjuntos de

componentes relacionados.

Page 23: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

15

Figura 4.1.a. Ventana inicial de la herramienta Servicios de Componentes.

Después de haber escrito todo el código de nuestro componente se utiliza

Visual Basic para compilar dicho componente como una DLL y registrarlo en el

sistema operativo. Una vez hecho esto, el archivo DLL es una versión

ejecutable del componente que se cargará gracias a COM+ cada vez que la

aplicación lo requiera.

El siguiente paso es crear la aplicación COM+ que suministrará los servicios

COM+ para nuestra aplicación Web. Para ello, lo primero es iniciar el

Explorador de Servicios de Componentes de Microsoft, tras lo que se

selecciona “Servicios de Componentes” y luego la máquina en cuestión.

Posteriormente se hace clic con el botón derecho del ratón sobre la carpeta

“Aplicaciones COM+” y en el menú de contexto que aparece se selecciona

Nuevo/Aplicación.

Page 24: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

16

Figura 4.1.b Creación de una aplicación COM+.

Esto inicia el asistente de instalación de aplicación COM+ (figura 4.1.c) que

nos guiará por los pasos de la creación de una nueva aplicación.

Page 25: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

17

Figura 4.1.c. Asistente para la instalación de aplicaciones COM+.

Como estamos creando una nueva aplicación, deberemos seleccionar la

opción crear una aplicación vacía.

Figura 4.1.d. Asistente: Creación de una aplicación vacía.

Page 26: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

18

Aquí nos pregunta parte de la configuración de nuestra aplicación, como

son el nombre y si queremos una aplicación de biblioteca o de servidor.

Seleccionamos la segunda opción, que viene por defecto, y hacemos clic en el

botón de siguiente.

El siguiente paso es identificar al usuario bajo el cual se ejecutará la

aplicación, que podrá ser el que tenga actualmente iniciada la sesión o uno

correctamente especificado en los text boxes colocados para tal fin.

Figura 4.1.e. Asistente: Identidad de la aplicación.

Si hubiéramos escogido un usuario explícito, cada cliente que utilice

Discovery deberá tomar esa identidad al procesarla. Tras haber seleccionado al

usuario nos aparecería la siguiente pantalla de fin de la instalación de la

aplicación COM+.

Page 27: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

19

Figura 4.1.f. Asistente: Aplicación instalada.

Con este proceso ya tendremos instalada la aplicación COM+, con que sólo

restaría asociarle los componentes correspondientes. Para hacer esto, abrimos

la carpeta de la aplicación para que nos muestre las carpetas de componentes,

componentes heredados y funciones que dispone. Seleccionaremos la carpeta

de componentes, que visualizará todos los componentes instalados en la

aplicación, y por tanto aun estará vacía.

Haremos clic sobre la carpeta de componentes usando el botón derecho del

ratón y sobre el menú de contexto seleccionaremos Nuevo/Componente, lo que

hará aparecer el asistente de instalación de componentes, tal y como podemos

apreciar en la figura 4.1.g.

Page 28: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

20

Figura 4.1.g. Asistente para la instalación de componentes COM+.

Este asistente nos permitirá instalar los componentes para nuestra

aplicación COM+. Pulsamos en “Siguiente” y en la pantalla que nos aparece

seleccionamos Instalar Nuevos Componentes, tras lo que nos pedirá que

escojamos el archivo DLL en donde están nuestros componentes. Lo vemos

en la siguiente figura 4.1.h.

Page 29: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

21

Figura 4.1.h. Asistente: Elección del fichero dll.

Elegimos la DLL, en este caso SatData.dll y pulsamos en el botón de

“Siguiente”. Tras lo cual nos debe salir la pantalla de finalización del asistente

diciéndonos que todo se ha efectuado correctamente.

Siguiendo los pasos anteriormente descritos instalaríamos los componentes

COM+ necesarios para el funcionamiento de Discovery en una máquina

manualmente, pero esto no es exactamente lo que buscamos, ya que

queremos que se haga desde una aplicación de instalación situada en un CD

de instalación, y que lo haga automáticamente para que así el cliente no se

pierda durante el proceso. Por lo cual, todo lo anterior tendremos que

implementarlo en la aplicación de instalación para que se haga de manera

oculta al usuario.

Para ello hice uso de unas de las facilidades que nos proporciona el

programa de Servicios de Componentes de Microsoft, la de exportar

aplicaciones COM+ a otras máquinas. Que mediante un fácil asistente nos

guiará en todo el proceso.

Nos situamos sobre la carpeta de nuestra aplicación y pulsamos el botón

derecho del ratón para seleccionar en el menú contextual la opción:”Exportar”.

Page 30: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

22

Figura 4.1.i. Exportar aplicaciones COM+.

Esto de nuevo nos iniciará un asistente que nos permitirá seguir todo el

proceso de manera sencilla.

Para ello el asistente crea un fichero de configuración con extensión *.msi

que contendrá toda la información de nuestra aplicación. Nos pedirá el nombre

completo del fichero msi que queremos crear y el modo en el que queremos

exportarlo, que en nuestro caso será Aplicación de Servidor.

Page 31: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

23

Figura 4.1.j. Asistente para exportar aplicaciones COM+.

Finalmente pulsamos sobre “Siguiente” y tras un breve período de tiempo el

asistente concluirá diciéndonos que todo se ha efectuado correctamente.

Con este fichero (que nosotros hemos llamado satcom.msi) podremos

instalar nuestra aplicación COM+ en el ordenador del cliente simplemente

importándola.

Esto lo tendremos que hacer de manera oculta al usuario y a través de

nuestro CD de instalación, por lo que quedaría la cuestión de cómo

programarlo.

4.2 Aplicación IIS.

El cliente accederá al entorno de trabajo Discovery a través de un cliente

Web o navegador, concretamente utilizando Internet Explorer. Desde el punto

de vista de este usuario final, Discovery se ejecuta como cualquier otra página

Web y por tanto como un documento que en cualquier momento se puede

Page 32: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

24

solicitar a un servidor Web. Cuando se conecta con dicho servidor se solicita un

servicio, a partir de un determinado puerto TCP, al que alguien tiene que

responder. Ese “alguien” es el servidor Web, es decir la aplicación que se

encarga de estar a la escucha y responder a las peticiones de los clientes.

Microsoft, a partir de la plataforma Windows 2000 incluye un servidor Web

conocido como Internet Information Server (IIS). Éste puede ser administrado

mediante una de las herramientas del sistema situada en el menú de inicio, en

concreto con la utilidad Servicios de Internet Information Server. La cual ofrece

un amplio abanico de posibilidades como son detener el servicio, pausarlo y

establecer la configuración pertinente de la aplicación Web. Tanto el servidor

como la utilidad Servicios de Internet Information Server no se instalan por

defecto con Windows, sino que se proporcionan con el CD de instalación pero

como componentes opcionales que el usuario puede instalar o no.

El servidor IIS, como todo servidor Web, tiene una función primordial: servir

los documentos solicitados por el cliente. Realmente, su cometido es el de

actuar como vinculo o herramienta por la que el usuario puede disponer o

modificar de la información deseada. O lo que en otras palabras definimos en

una sección anterior como interfaz de usuario. Por lo que a través de

componentes COM+ accede a los datos de la base de datos y se los presenta

al cliente.

El protocolo que permite que el cliente y el servidor se entiendan es HTTP

(Hypertext Transfer Protocol), gracias al cual un usuario puede simplemente

introducir, directa o indirectamente, un URL y obtener a cambio prácticamente

cualquier tipo de documento, desde una página HTML hasta una imagen, un

sonido o un vídeo.

Al principio, los servidores Web se limitaban a enviar a los clientes los

documentos solicitados sin efectuar ningún proceso de estos. Esto era así

hasta la aparición de una técnica conocida como páginas ASP (Active Server

Pages), que a groso modo se pueden calificar como documentos HTML que

contienen partes para el cliente y partes para el servidor.

Cuando un cliente solicita un documento que es una página ASP, iniciales

que coinciden con su extensión, IIS explora el contenido del documento en

Page 33: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

25

busca de marcas <% y %>, que son las encargadas de delimitar la sección de

la página que debe procesar el servidor (script). A continuación se sirve de un

módulo para analizar ese contenido, generalmente código de script escrito la

mayoría de las veces en VBScript o Jscript, y lo procesa obteniendo el

resultado. Finalmente, ese resultado sustituye a todo el contenido comprendido

entre los delimitadores anteriores.

Desde el código de una página ASP es posible efectuar prácticamente

cualquier proceso, desde simplemente mantener un contador hasta obtener

información de una base de datos SQL Server. Es posible usar además

controles ActiveX diseñados para ASP.

Para el desarrollo del interfaz de usuario usando páginas ASP se ha

utilizado una de las herramientas que forman parte de Visual Studio 6,

concretamente Visual InterDev, que cuenta con asistentes que nos proveen de

hojas de estilo y código prefabricado, contando con editores para páginas

HTML, código de script, etc.

Resumiendo, podemos decir que el uso de páginas ASP nos permite crear

documentos Web dinámicos, es decir donde el usuario puede interactuar con la

aplicación, y por tanto nos provee de la solución ideal para el desarrollo del

interfaz de usuario del entorno de trabajo Discovery. Además como servidor de

esta aplicación Web empleamos a Internet Information Server de Microsoft,

dado su alto grado de fiabilidad y difusión por estar incluido en toda plataforma

Windows posterior a Windows 2000.

Una vez descrito lo que queremos instalar, tenemos que tener claro como

hacerlo, es decir como desarrollar una aplicación que instale el interfaz de

usuario en la máquina del cliente sin que éste tenga que preocuparse de su

configuración. Para ello, primero vemos como se realizaría manualmente para

luego programarla adecuadamente.

No se trata de crear la aplicación Web y después instalarla, ya que la

aplicación ya está creada, sino en usar IIS para distribuirla en la Intranet de la

empresa o en ordenador del propio usuario. Para ello debemos iniciar la

herramienta Servicios de Internet Information Server, que podemos encontrar

Page 34: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

26

dentro de la carpeta Herramientas Administrativas del menú de Inicio

(previamente se debe instalar del CD de Windows si aun no se ha hecho).

Debemos tener en cuenta que el cliente puede disponer tanto de un único

ordenador donde quiera instalar todo el entorno de trabajo Discovery o una

completa red de ordenadores, donde uno de ellos será el que actúe como

servidor Web mientras que los otros solo lo hacen como clientes. En ambos

casos tendremos un servidor Web, el único ordenador en el primer caso y el

propio servidor en el segundo, y será allí donde tendremos que instalar la

aplicación Web.

Para publicar un documento en IIS debemos situarlo en el directorio de

publicación de Web predeterminado, denominado directorio principal, y que

está localizado por defecto en \Inetpub\Wwwroot, directorio al que

accederíamos escribiendo en la barra de direcciones http://nombredelequipo o

http://localhost o http://127.0.0.1 . Así pues, debemos situar nuestra aplicación

Web dentro de ese directorio. Con esto ya podremos acceder a nuestra

aplicación Web, pero para poder configurarla usaremos la herramienta

Servicios de Internet Information Server. Para lo que crearemos un directorio

virtual dentro del sitio Web predeterminado y situaremos allí nuestra aplicación.

Figura 4.2.a. Creación del directorio virtual.

Una vez que hacemos clic en directorio virtual nos aparecerá un asistente

que nos ayudará a la instalación de nuestra aplicación Web.

Page 35: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

27

Figura 4.2.b. Asistente para la creación de un directorio virtual.

Al pulsar el botón siguiente pasaremos a una pantalla donde se nos

preguntará por el nombre del directorio virtual, nombre que tendremos que

poner posteriormente en la barra de direcciones cuando queramos acceder a él.

Así pues nosotros elegimos el nombre “SATCOM”.

Figura 4.2.c. Elección del nombre del directorio virtual.

Page 36: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

28

Tras lo que nos preguntarán sobre la ubicación física donde se encuentra el

directorio con toda la aplicación Web. Ésta es donde previamente guardamos el

directorio, en el directorio principal: \Inetpub\Wwwroot\Satcom.

Figura 4.2.d. Ubicación del directorio virtual.

Finalmente nos ofrece la posibilidad de configurar los permisos de acceso a

dicho directorio, opción que dejamos con la configuración mostrada por defecto

ya que se adecua perfectamente a nuestras necesidades.

Figura 4.2.e. Configuración de los permisos de acceso.

Page 37: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

29

Cuando pulsamos sobre el botón de siguiente nos saldrá una ventana

indicándonos que el directorio virtual se ha creado correctamente.

Gracias a este asistente ya tenemos la aplicación Web dispuesta para

poder configurarla por medio de la herramienta Servicios de Internet

Information Server. En concreto lo que nos proponemos es cambiar el tiempo

de espera de sesión (Session Timeout). Dicha propiedad especifica el tiempo

tras el que si el usuario no realiza ninguna petición o no actualiza la página, la

sesión expira. Por defecto este valor está configurado a 20 minutos, valor que

queremos cambiar a otro periodo de tiempo más elevado que permita al cliente

vigilar la aplicación a la espera de una posible alarma durante una semana

completa, tiempo más que suficiente para que éste interactúe de algún modo

con Discovery y que por tanto el periodo de Timeout se reinicie. Dicho tiempo

deberá ser entonces cambiado a 7 días, o lo que es lo mismo 10080 minutos.

También deseamos modificar el tiempo que se asigna a la espera de

secuencia de comandos ASP, que por defecto es de 90 segundos. Este

periodo es el tiempo durante el cual se puede estar ejecutando un script ASP

antes de terminar su función. Como en nuestro caso Discovery es un sistema

bastante complejo que necesita de representación gráfica de sistemas de

mapeo y que puede estar distribuido entre diferentes máquinas y por tanto

acarrear ciertos retrasos, debemos cambiar este valor a uno más alto que nos

garantice una mayor fiabilidad. El valor escogido ha sido de 900 segundos, es

decir 15 minutos, tiempo más que suficiente. De hecho en el proceso de prueba

cuando nos acercábamos a dicho valor era señal de que el script no funcionaba

correctamente.

Para realizar estos cambios se utiliza la herramienta Servicios de Internet

Information Server, se sitúa el ratón sobre el directorio virtual apropiado, es

decir el que hemos llamado SATCOM, hacemos clic con el botón derecho del

ratón y nos vamos a “Propiedades”.

Page 38: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

30

Figura 4.2.f. Cambio de la configuración de la aplicación Web.

Donde podremos apreciar que ya tenemos configurado la ruta de acceso

local, que es donde se ubica físicamente el directorio de nuestra aplicación

Web. Ahora pulsamos en configuración y seleccionamos la etiqueta opciones.

Figura 4.2.g. Cambio de los tiempos de expiración.

Page 39: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

31

Es en esta ventana que nos aparece donde podemos efectuar los cambios

antes explicados, establecer el tiempo de espera de sesión de 7 días y el

tiempo de espera de secuencia de comandos ASP de 15 minutos.

Como ya detallé antes con la aplicación COM+, esto sería la forma manual

de hacerlo, y como los empleados de Satcom configuraban los ordenadores de

los clientes antes de que se iniciara este proyecto. Ahora debemos encontrar

una manera de programar todo esto para que se haga de forma transparente al

usuario, sin que éste tenga que tener conocimiento alguno sobre IIS, ASP o el

Servicio de Internet Information Server. De manera que el cliente sólo deba

elegir el equipo donde va a ubicar el servidor Web y le de un botón de nuestra

aplicación para que todo se haga automáticamente.

Concluyendo, nuestra aplicación de instalación de Discovery deberá permitir

elegir al cliente la instalación del servidor Web en la máquina que él desee

(generalmente el servidor de la red) y en dicho caso instalará la aplicación en el

directorio principal, creará el correspondiente directorio virtual en el servicio de

Internet Information Server y cambiará tanto el tiempo de espera de sesión

como el tiempo de espera de secuencia de comandos ASP. Y todo esto lo debe

hacer a modo de un programa de instalación y por tanto de manera sencilla

para el usuario.

4.3 Base de Datos.

Una base de datos es una combinación de información de esquema y datos

que nos permite almacenar información de forma ordenada. Dicha ordenación

nos permite que podamos disponer de la información en diferentes aplicaciones,

ya que sabremos de antemano la estructura o esquema en que van a estar

dispuestos los datos.

Una base de datos puede estar compuesta de un solo archivo, que es lo

más habitual, o bien varios de ellos repartidos en diversos volúmenes. En

cualquier caso, el contenido de la base de datos no se limita tan sólo a los

datos propiamente dichos y a la información de esquema, sino que además,

Page 40: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

32

también pueden albergar otros elementos como contadores y distintas

funciones para su gestión.

La información de esquema describe la estructura de los datos

almacenados en la base de datos. Estos se agrupan formando registros o filas

donde cada una de las cuales cuenta con varios campos o columnas. Las filas

se agrupan formando tablas y la suma de las tablas, los contadores, las

funciones, etc. forman la base de datos.

Siendo más incisos, un campo es la unidad mínima de información que es

posible crear o modificar en una base de datos. Un registro o fila es un conjunto

de campos o columnas relacionadas entre sí. Por último, una tabla es una

colección de registros que, conteniendo informaciones distintas, guardan una

misma estructura.

Además, las bases de datos no sólo sirven para guardar datos sino que

pueden así mismo asegurar la validez de éstos. Es por esto que la base de

datos no sólo definirá las tablas y su estructura, además también se

establecerán reglas y restricciones para establecer los rangos de valores que

pueden tomar ciertas columnas, especificar el tipo de dato que van a

almacenar, dar valores por defecto a ciertas columnas, etc. En resumen, las

reglas y restricciones de las bases de datos sirven para asegurar que la

información introducida, ya sea por cualquier aplicación o directamente por un

usuario, sea siempre válida.

La base de datos propiamente dicha es el archivo en el que se almacenan

los datos, la información de esquema, las reglas y restricciones y los

procedimientos o funciones almacenados. Pero las aplicaciones no acceden

directamente a esa información, sino que lo hacen de forma indirecta a través

de una aplicación conocida como Motor de Bases de Datos. Será este motor el

que determine las posibilidades y limitaciones de nuestras aplicaciones con

acceso a datos.

En nuestro caso, debemos tener en cuenta que Discovery puede que se trate

de instalar en una configuración en red, de manera que tendremos que usar

una base de datos que funcione en una configuración Cliente/Servidor, de tal

forma que la base de datos se divide en dos capas: un cliente, al que accede la

Page 41: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

33

aplicación en el ordenador local, y un servidor, que se ejecuta en el ordenador

que aloja la base de datos.

Figura 4.3 Representación de base de datos funcionando en configuración Cliente/Servidor.

Llegado a este punto nos decidimos por emplear una base de datos SQL,

ya que permite una completa interoperabilidad con el resto de la aplicación y

sigue un esquema Cliente/Servidor como el definido anteriormente, y que por

tanto se adecua perfectamente a nuestras necesidades.

Otra de las causas de esta elección es que en el caso de que el cliente no

tenga instalado SQL Server 2000 o uno posterior, podemos instalar de forma

gratuita (sin cargos por distribución) MSDE 2000, que es un motor de base de

datos totalmente compatible con SQL 2000, aunque eso si con menos

capacidades.

Así pues, tendremos que instalar una base de datos con toda la información

sobre la flota de vehículos, su gestión y control en la máquina adecuada del

cliente. En el caso de que disponga de un solo ordenador, lógicamente la base

Page 42: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

34

de datos se instalará en éste. Si estamos instalando Discovery en una red de

ordenadores la base de datos se instalará en el servidor.

Para ello, el programa de instalación deberá preguntar si el cliente tiene

instalado SQL Server 2000 o posterior, y darle la posibilidad de instalar la base

de datos usando éste o instalarlo utilizando MSDE 2000. Además, también se

deberá posibilitar la instalación de MSDE 2000, si así lo requiere el usuario.

Tanto SQL Server 2000 como MSDE 2000 disponen de una herramienta

que nos permite controlar y gestionar la base de datos desde la línea de

comandos. Utilizando declaraciones y comandos en Transact-SQL podremos

interactuar e incluso crear nuevas bases de datos a partir de cierto fichero de

configuración previamente desarrollado.

Dicho fichero consta de todo el esquema de la base de datos, la estructura

de las diferentes tablas y el tipo de contenido de cada uno de sus campos, así

como de distintos procedimientos y funciones que se utilizarán para gestionar

dichos datos.

La información de este fichero debe ser confidencial, ya que aloja toda la

estructura de la información que va a disponer el cliente, así como los

diferentes procedimientos para su gestión. Por ello, este fichero deberá

aparecer encriptado en el CD de instalación, y se desencriptará de forma

automática por la aplicación, no dejando en ningún momento que pueda ser

visto o manipulado por ninguna persona ajena a Satcom, ni tan siquiera el

cliente. El método de encriptación será explicado en un apartado posterior de

este proyecto.

Una vez que la aplicación de instalación del entorno de trabajo Discovery

desencripte el fichero, este se ejecutará en la línea de comandos. Tanto SQL

Server 2000 como MSDE 2000 disponen de una herramienta para gestionar y

controlar la base de datos desde la línea de comandos utilizando órdenes en

Transact-SQL. Dicha herramienta se conoce como ISQL en el caso de SQL

Server 2000 ó OSQL en caso de MSDE. Ambas tienen funcionalidades

similares y nos permiten leer los comandos Transact-SQL desde un fichero.

Fichero donde se encontrarán las órdenes pertinentes para crear la base de

datos deseada.

Page 43: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

35

En la sección de Anexos (Anexo 9.4) se incluye una breve guía de la

funcionalidad de dichas herramientas.

4.4 Infomap.

Discovery se debe basar en un buen software de mapeo que permita al

cliente seguir su flota de vehículos hasta en la calle más recóndita de Europa.

Además el software de mapeo utilizado debe de tener suficiente calidad para

que los clientes queden satisfechos con él, que será el que se distribuya por

defecto. Por todo ello, además de por la facilidad que ofrece para programar

funciones que actúen sobre el mapa, la elección se decantó por utilizar el

software de mapeo Infomap.

Infomap es un sistema de información geográfica para Windows, que

gracias a su gran diseño permite modificar o crear objetos en el mapa, así

como un gran número de funciones que interactúan con la base de datos.

Además presenta un conjunto de mapas de gran calidad que describen con

todo detalle las carreteras de toda Europa, incluyendo países como Andorra o

el Vaticano.

4.5 Ficheros Ejecutables.

El entorno de trabajo Discovery necesita de algunas aplicaciones

adicionales para su correcto funcionamiento. Dependiendo del acuerdo al que

cliente y Satcom Technology hayan llegado, el cliente se instalará el ejecutable

que corresponda.

4.5.1 Satcom Configuration.

Satcom Configuration es una herramienta fundamental para el

funcionamiento de Discovery, ya que realiza la configuración final que enlaza el

servidor de la base de datos con las librerías utilizadas para la aplicación Web.

Page 44: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

36

4.5.2 Satcom Wavecom MODEM.

Este programa se encarga de mandar y recibir mensajes de textos desde un

modem Wavecom, así como de establecer llamadas de datos (data calls).

Con ello se comunica el entorno de trabajo Discovery con la unidad en

cuestión.

4.5.3 Satcom GPRS.

Con esta aplicación tanto los vehículos como Discovery intercambian

información a través de TCP/IP utilizando la tecnología GPRS.

4.5.4 Satcom TrakM8 FTP Client.

Para los clientes que hayan optado por GPRS en vez de GSM, se les facilita

esta aplicación de FTP que les permite a las unidades que le manden a

Discovery su historial. Esto se realizaba mediante Data Calls en el caso de los

clientes con GSM.

4.6 Otros.

A lo largo de la aplicación de instalación se instalan diversos ficheros

ejecutables necesarios para el correcto funcionamiento de Discovery.

El conjunto de ficheros ejecutables que se instalan son los siguientes:

- MDAC_TYP27: instala los ficheros de librería para ADO, lo que permite

a una aplicación hacer llamadas a base de datos tales como Microsoft

ACCESS o SQL.

- VBRun60sp4: es un fichero proveído por Microsoft que permite que una

aplicación creada en Visual Basic funcione en una maquina ajena.

Page 45: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

37

- InfoMap Components 3.0 EN: permite el uso de un conjunto de

funciones sobre los mapas.

Page 46: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

38

5. Elección de una herramienta de

trabajo para la aplicación: Visual

Basic.

Antes de comenzar a desarrollar la Aplicación de Instalación del Entorno de

Trabajo Discovery, se tuvo que estudiar y debatir previamente a cerca de que

sistema de programación se utilizaría para crearla.

Debido a la naturaleza de interactividad que requería la aplicación, donde

se debe requerir información al usuario para tomar un rumbo u otro, en un

primer momento se pensó en hacerla utilizando código en HTML, de manera

que todo fuera en modo página Web. Pero una vez iniciada la aplicación, se

cayó en la cuenta de que necesitábamos un lenguaje de programación más

potente que nos permitiera poder configurar el sistema del cliente con relativa

facilidad.

Llegados a este punto, el abanico de posibilidades se extendía ampliamente.

La mejor opción que vislumbramos fue el utilizar uno de los posibles lenguajes

que nos provee el paquete Microsoft Visual Studio 6.0 que es un sistema de

herramientas multipropósito, que nos permite desarrollar prácticamente

cualquier tipo de proyecto.

Las alternativas eran pues o utilizar Visual Basic 6.0 o utilizar Visual C++

6.0. La elección no resultó fácil, ya que mientras con Visual C++ ganamos en

potencia de programación y en recursos, también es verdad que resulta más

complicado de utilizar. Por otro lado, el uso de Visual Basic es ideal para crear

interfaces de usuario, ya que es básicamente una tarea que se reduce a

algunas operaciones de arrastrar y soltar, y aunque el lenguaje en sí no llega

tan lejos como Visual C++ con respecto a posibilidades de desarrollo, si que es

más que suficiente para desarrollar la aplicación que nos planteamos.

Page 47: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

39

A todo esto hay que añadir un cierto grado de egoísmo por mi parte, ya que

mientras que ya había trabajado antes con C++, nunca lo había hecho con

Visual Basic, con lo que me interesaba aprender a utilizarlo.

Finalmente y teniendo en cuenta todo lo dicho anteriormente, se opto por el

uso de Visual Basic 6.0 para desarrollar la Aplicación de Instalación del Entorno

de Trabajo Discovery. Y tras haberla realizado, habría que indicar que la

decisión fue la correcta, ya que ante cualquier eventualidad, siempre teníamos

recursos suficientes para solventarla de modo satisfactorio, además de que se

trata de un lenguaje de programación ampliamente difundido y por tanto más

que bien documentado.

Page 48: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

40

6. Desarrollo de la Aplicación de

instalación del entorno de trabajo

Discovery.

En este apartado se describirá como se ha desarrollado la aplicación,

haciéndose un análisis exhaustivo de los métodos empleados así como de los

propósitos a conseguir en cada uno de los formularios realizados.

Una de las directrices a seguir en el desarrollo de la aplicación es el

considerar que el cliente no tiene por qué tener un conociendo alto con

respecto a la gestión de sus recursos hardware, como son sus ordenadores o

su posible red. Por lo que la aplicación debe de ser fácil de seguir y

comprender para un usuario medio.

Otra de las directrices que ya se ha mencionado a lo largo del proyecto es

la necesidad de un alto grado de confidencialidad, es por ello que se debe

desarrollar de forma paralela una aplicación de encriptado para codificar el

fichero de configuración de la base de datos, de manera que no sea

comprensible para alguien ajeno a Satcom que desconozca el método de

encriptación empleado.

Así mismo, y siguiendo la directriz de la confidencialidad, sería necesario el

desarrollo de una tercera aplicación que nos proporcione un código de producto

único para cada ordenador, a partir del cual se creará una clave de desbloqueo

también única que permitirá al poseedor del CD de la aplicación instalarla.

Dicha clave de desbloqueo será proporcionada al cliente directamente por

Satcom, por lo que de este modo la empresa tendrá en todo momento control

sobre quien se ha instalado el entorno de trabajo Discovery y en cuantas

máquinas lo ha hecho.

Como ya se especificó en el apartado anterior, la herramienta usada para

programar dichas aplicaciones es Visual Basic 6.0. En esta plataforma de

Page 49: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

41

programación, los proyectos se dividen en distintos formularios que guiarán e

interactuarán con el usuario a través de la aplicación. Cada formulario consta

de un código propio que se ejecuta cuando dicho formulario es cargado.

Además, existen los llamados Módulos, donde se agrupan todo aquel código

común a todos los formularios, y que por tanto podrá ser utilizado desde todos

ellos. Con Visual Basic también tenemos la posibilidad de crear Módulos de

Clase, que nos permitirá crear objetos nuevos dentro de nuestra aplicación,

establecer sus atributos y definir los eventos que describen su comportamiento.

También, haremos uso de los servicios ofrecidos por el sistema operativo

en forma de API (Interfaz de Programación de Aplicaciones), es decir, un

conjunto de funciones que nos permiten realizar las tareas propias del sistema

operativo, tal y como pueden ser, cerrar la sesión, editar el registro de

Windows,etc. En los anexos (Anexo 9.5) se incluye un apartado que explica

como incluir una función API en nuestra aplicación.

Para el desarrollo de una aplicación ordenada, lo aconsejable es mantener

ciertas reglas, como pueden ser reglas de nomenclatura, o programar varios

módulos, cada uno para cierta parte de la aplicación. Siguiendo estos axiomas

desarrollamos nuestras aplicaciones de manera que puedan ser fácilmente

legibles durante su diseño además de que para un posible programador que

pueda incorporarse al proyecto posteriormente no sea muy complicado el

seguirla.

Resumiendo, para la instalación del entorno de trabajo Discovery

deberemos:

- Crear la propia aplicación de Instalación.

- Crear la aplicación de Encriptación.

- Crear la aplicación del Código de Desbloqueo.

- Realizarlas de forma que el cliente puede seguir la aplicación

fácilmente (la aplicación de instalación).

- Desarrollarlas de forma ordenada, agrupando las funciones en módulos

y utilizando reglas de nomenclatura.

Page 50: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

42

6.1 Aplicación de Instalación.

Es la aplicación central del proyecto que se encarga de instalar el entorno

de trabajo Discovery en el ordenador/red de ordenadores del cliente. Por ello

debe ser capaz de instalar los distintos componentes de forma independiente y

en diferentes máquinas si así se precisa. Es por esto que deberá distinguir

entre una instalación cliente, donde sólo se instalaría el software de mapeo y

se enlazaría con los recursos dados por el servidor, y una instalación servidor,

donde se instalarían el grueso de la aplicación como son los componentes

COM+, el directorio virtual IIS, la base de datos y los distintos ejecutables.

En la siguiente figura se puede apreciar esta distribución por medio del

diagrama de flujo.

Figura 6.1. Diagrama de flujo de la Aplicación de Instalación.

En el diagrama se puede ver que en función de la elección del usuario entre

una instalación en modo Servidor o en modo Cliente, la aplicación seguirá un

curso u otro. Cuando se opta por el modo Cliente, primero el usuario deberá

aceptar la licencia e introducir un código de desbloqueo que le permita instalar

Page 51: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

43

el producto, tras lo que la aplicación le guiará en la instalación del software de

mapeo (InfoMap) y “enlazará” la máquina del cliente con el servidor Web de

Discovery.

Cuando la elección es el modo Servidor, también se empieza certificando

que el usuario acepta la licencia e introduce un código de desbloqueo válido,

tras lo que se le guía en la instalación de forma distribuida de los diferentes

componentes que deben ser instalados, pudiéndose instalar éstos cada uno en

una máquina distinta.

La aplicación de instalación está formada por 18 formularios, 6 módulos y

un módulo de clase.

Para que la explicación sea más comprensible, se hará de manera guiada.

Es decir, se explicarán los formularios en el orden en el que aparecerían si un

cliente estuviera tratando de instalar la aplicación, aunque deteniéndonos en

cada formulario para explicar su contenido.

6.1.1 Formularios.

La aplicación de instalación está formada por 18 formularios que permitirán

al cliente elegir entre distintos modos de instalación y configuración. Cada

formulario (excepto el primero) estará precedido de otro/s que lo invoca/n en

función del camino elegido por el usuario. De esta manera la aplicación puede

seguir el rumbo que deseemos y permitirá que el cliente pueda realizar una

instalación del entorno de trabajo Discovery de forma distribuida.

6.1.1.1 frmSetUp.

Este es el primer formulario que aparece cuando iniciamos la aplicación.

Con él, el cliente tiene la posibilidad de elegir entre si quiere hacer una

Page 52: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

44

instalación en modo servidor o en modo cliente. Se diferencian así ambos tipos

por si el usuario dispone de una red de ordenadores y prefiere tener una

instalación del entorno de trabajo Discovery de manera distribuida.

Figura 6.1.1.1. Formulario frmSetup

Además del mensaje de bienvenida, el formulario habilitará el botón “Install”

sólo si se ha elegido previamente un modo de instalación.

Dependiendo de la elección del cliente, la aplicación guardará en una

variable global llamada “strWhoCall” el valor “Server” cuando el cliente elige la

instalación modo servidor, o “Client” cuando el usuario elige la instalación modo

cliente. Esta variable será utilizada posteriormente para llamar a un formulario o

a otro en función de la selección escogida por el usuario.

Al ser este el primer formulario, tiene una funcionalidad añadida que es

fundamental para el resto de la aplicación. Esta es la identificación de la ruta

del directorio de Windows (normalmente C:\Windows\System32) y del disco

donde éste está ubicado (normalmente C:). Está información es vital por que

nos indicará en que disco instalar Discovery y en que directorio instalar los

archivos DLL y OCX necesarios. Para ello utiliza la función

GetWindowsDirectory() ubicada en el módulo principal de la aplicación y que

por tanto se explicará más adelante. Todo esto se realizará nada más iniciar la

aplicación, es decir al cargar este formulario.

Page 53: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

45

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.1.

6.1.1.2 frmLicense.

Desde el punto de vista del usuario, éste es la típica ventana para aceptar la

licencia que nos permite usar la aplicación. Visualmente el formulario consta de

un scroll vertical que nos permite desplazarnos a lo largo del documento,

además de dos checkboxes donde el cliente puede aceptar el contrato de

licencia o no. Hasta que no esté activada la casilla de aceptar, no se habilitará

el botón “Next” que nos dirige al siguiente formulario.

Una vez aceptada la licencia, la aplicación está legalmente autorizada para

empezar la instalación. Así pues, cuando el cliente haga clic sobre el botón

“Next”, la aplicación dará los primeros pasos de la instalación. Estos son el

crear un directorio llamado Satcom Discovery en la carpeta Archivos de

Programas del ordenador del cliente, donde se almacenarán los diferentes

ejecutables y archivos de configuración necesarios.

Además se creará una entrada en el registro de Windows para dejar

constancia de que se ha instalado ciertos componentes de Discovery. Dicha

entrada se llamará Satcom y estará situada en la clave del registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Satcom.

La siguiente figura (figura 6.1.1.2) muestra el aspecto de este formulario.

Page 54: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

46

Figura 6.1.1.2. Formulario frmLicense.

Este formulario también se encarga de instalar y registrar en el sistema un

archivo OCX necesario para el uso de barras de progreso en la aplicación. Las

barras de progreso son los típicos espacios huecos que se van rellenando a

medida que algo se está instalando en el ordenador dando así una impresión al

usuario de cuanto se ha instalado y de cuanto falta aun por instalar. Estas

barras también son de utilidad para hacer un depurado de la aplicación ya que

cuando ésta falla, según el recorrido que haya tenido la barra de progreso

sabremos más o menos por donde estará el código erróneo. Aunque

lógicamente se utilizan técnicas y facilidades dadas por Visual Basic para el

depurado de las aplicaciones, este uso nos puede ahorrar unos segundos de

búsqueda.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.2.

Page 55: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

47

6.1.1.3 frmProductKey.

Éste sería el siguiente formulario en aparecer. Se trata de cumplir con una

de las directrices que nos marcamos a la hora de desarrollar esta aplicación,

que no pudiera emplearse fuera del control estricto de Satcom.

Figura 6.1.1.3. Formulario frmProductKey.

Para ello se diseño el formulario de modo que al cliente le apareciese un

código del producto único, y con él, se pusiera en contacto con Satcom para

obtener el código de desbloqueo que le permita seguir adelante con la

aplicación. Como el código en sí es largo y difícil de transcribir a papel, se

añade un botón que permite copiarlo al portapapeles de Windows, y desde ahí

el usuario podrá maniobrar como quiera con él.

Page 56: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

48

De esta manera, conseguimos tener un control sobre nuestros clientes, y

como el código es único para cada máquina, también controlamos el número

de instalaciones que cada cliente realiza y en cuantos equipos.

Una vez el cliente se ha puesto en contacto con Satcom y se verifica su

contrato, se le proporcionará el código de desbloqueo, código que el cliente

deberá escribir en el text box “Unlock Key” para poder continuar con aplicación

de instalación. Se le permitirán al usuario cuatro oportunidades para introducir

el código correcto, tras las cuales la aplicación se cerrará.

Cuando el código de desbloqueo es el correcto y se pulsa el botón “Next” se

creará un valor nuevo de tipo REG_SZ (para valores alfanuméricos) en la clave

del registro creada en el formulario anterior

(HKEY_LOCAL_MACHINE\SOFTWARE\Satcom) con el nombre Unlock Key y

que contendrá el código de desbloqueo para que en ese ordenador esté código

aparezca ya automáticamente en su campo del formulario en las posteriores

ocasiones que se utilice la aplicación de instalación.

Hasta aquí, tanto la instalación modo Servidor como la modo Cliente

coinciden. Es ahora, tras la aceptación de la licencia, que ambos caminos se

bifurcan. Para ello, este formulario mira en la variable global strWhoCall,

valorada en el primer formulario (frmSetUp), y en función de su contenido

encamina la aplicación hacia un formulario o hacia otro. Para mejor

comprensión del proyecto se empezará explicando la instalación en modo

Servidor.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.3.

Page 57: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

49

6.1.1.4 frmSelection (Instalación modo Servidor).

Éste es el formulario principal de la instalación en modo Servidor ya que

desde aquí el usuario decidirá que componente instalar en el ordenador que

está usando en ese momento.

Figura 6.1.1.4.a Formulario frmSelection.

Como ya se ha mencionado a lo largo del proyecto, el cliente puede optar

por instalar el entorno de trabajo Discovery de forma distribuida, por lo que la

separación en distintos componentes de instalación era una cuestión necesaria.

El formulario consta de varios botones a través de los cuales se realizaran

funcionalidades diferentes. Cada uno de estos botones haría lo siguiente:

Page 58: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

50

• Botón “Install COM+ Aplication”: debido a que para la instalación de la

aplicación COM+ es necesario que el cliente de más información acerca de

la configuración que desea, este botón se limita a ser un puente hacia otro

formulario (frmIdentity) donde dicha información será requerida y COM+

instalado.

• Botón “Install IIS”: en este caso, ya disponemos de toda la información

necesaria para la instalación del directorio virtual en IIS, con lo que haremos

la instalación directamente desde este formulario. Para ello primero tendría

que explicar que el formulario no es exactamente como se muestra en la

figura anterior, sino que es algo más alto ya que dispone de una barra de

progreso. Cuando el usuario pulse sobre este botón, el formulario

engrandecerá pasa mostrar dicha barra de progreso y cuando termine de

instalar el directorio virtual volverá a su tamaño normal para ocultarla.

Figura 6.1.1.4.b Formulario frmSelection con la barra de progreso.

Page 59: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

51

Además, se bloquea el formulario para que así no se pueda pulsar ningún

otro botón mientras se esta ejecutando éste y así evitar posibles errores y

sobrecargas. En el plano estético, se cambia el símbolo del ratón de la

flecha al típico reloj de arena para indicar que se está ejecutando la

aplicación.

A partir de entonces se empieza a realizar la instalación; primero copiamos

nuestro directorio Satcom, donde está la aplicación Web, en el directorio

principal de IIS, es decir en “\Inetpub\wwwroot”. Y finalmente y utilizando un

módulo de clase creado para tal utilidad que se explicará más adelante, se

realizará toda la configuración que se explicó en el apartado 4.2 en la

herramienta Servicios de Internet Information Server, es decir, crear el

directorio virtual y configurarlo según nuestras necesidades: llamarlo

SATCOM, relacionarlo con su ubicación física en

“\Inetpub\wwwroot\Satcom”, y cambiar tanto el tiempo de espera de sesión

como el tiempo de espera de secuencia de comandos ASP. Pero ahora, eso

sí, de forma automática y sin que el cliente tenga que realizar acción alguna.

• Botón “Install Database”: al pulsar este botón el usuario será dirigido a otro

formulario (frmDatabaseSelection) donde se realizará la instalación y

configuración de la base de datos.

• Botón “Communications”: con “communications” se refiere a los ficheros

ejecutables que en Discovery nos permiten comunicarnos con los vehículos,

es decir, el cliente FTP, el gestor del MODEM GSM/GPRS ,…

Cuando se hace clic sobre este botón, primero se instalan y registran los

archivos DLL y OCX necesarios para el correcto funcionamiento de dichos

ficheros ejecutables, para lo que se hace uso de un procedimiento Sub

llamado “InstallDLL” definido en el módulo principal y que por tanto se

describirá posteriormente. Tras este paso, se llamará al formulario que

instala las diferentes aplicaciones de comunicación.

• Botón “Finish”: para identificar cuando se ha instalado algún elemento en la

máquina del cliente se crea una variable global booleana llamada

“boAnyInstalled” a la que le daremos el valor verdadero siempre que se

Page 60: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

52

haya instalado algo. Así podremos distinguir entre dos posibles finales de la

aplicación de instalación, uno en el que no hará falta reiniciar el equipo, y

otro en el que se le aconseja al usuario a que lo reinicie.

Este formulario actúa como eje central de la instalación en modo Servidor,

de manera que una vez que se instale cualquier componente se volverá a este

formulario antes de salir de la aplicación por si el cliente quiere instalar algo

más. Por este motivo, y para que el cliente sepa en cada momento que ha

instalado previamente, se crean unos valores en el registro de Windows para

identificar que parte de la instalación está concluida. Así, cada vez que se

carga el formulario, se chequea el registro para ver que hay instalado, y se

añade una etiqueta en rojo al lado del componente que ya lo esté. Estas

etiquetas no atañen al botón “Communication” ya que esto se hará en el

formulario que instala los ficheros de comunicación (frmExeFiles). Para un

ordenador con todo ya instalado, tendríamos la siguiente apariencia:

Figura 6.1.1.4.c. Formulario frmSelection con los tres primeros componentes ya instalados.

Page 61: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

53

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.4.

6.1.1.5 frmIdentity (Instalación modo Servidor).

Este es el formulario encargado de instalar la aplicación COM+ que

englobará toda la capa de negocio de Discovery. Se llega a aquí cuando el

cliente pulsa sobre el botón “Install COM+ Application” en el formulario de

selección (frmSelection).

Figura 6.1.1.5. Formulario frmIdentity.

Tal y como ocurría cuando tratábamos de instalar la aplicación COM+

manualmente, se necesita identificar al usuario bajo el cual se ejecutará la

Page 62: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

54

aplicación. Para ello se creó este formulario, dando la opción de ser el usuario

que tenga iniciada la sesión u otro correctamente especificado en los text

boxes que se habilitan cuando se valida la opción “This User”.

Así pues, cuando el cliente pulse sobre el botón “Next” dependiendo de la

opción elegida instalará la aplicación COM+ bajo el usuario por defecto (el que

tenga iniciada la sesión) o bajo el especificado por el cliente.

Cuando se pulsa sobre el botón “Back” simplemente se vuelve al formulario

anterior, que es el formulario central de la instalación en modo Servidor:

frmSelection.

Algunas particularidades añadidas de este formulario son, que además de

que los text boxes referentes a la identificación de un usuario concreto sólo

están habilitados cuando esta opción es la escogida, cuando esto ya se ha

hecho previamente, ésta pasa a ser la opción por defecto y los text boxes se

rellenan automáticamente con los valores escritos en la ocasión anterior. Para

lo que se hace uso del almacenamiento y lectura de esa información en el

registro de Windows en la clave de Satcom.

También incluye una barra de progreso, que como en el caso del formulario

anterior está oculta por el tamaño de la ventana. Mientras se esté ejecutando la

instalación, el formulario aumentará su tamaño y dejará ver dicha barra,

ocultándola de nuevo al finalizar la instalación.

Como ya se explicó, el formulario frmSelection es el formulario central de la

instalación en modo Servidor. Por tanto, y tal y como se ha visto en el código,

cuando se termine este formulario se volverá al frmselection. De esta manera,

el cliente tras haber instalado la aplicación COM+ en un ordenador podrá

decidir si instalar el directorio virtual, la base de datos, y/o los ficheros de

comunicación en esa misma máquina o no.

Lo mismo pasará con los formularios para crear la base de datos y para

instalar los ficheros de comunicación, que cuando terminan su cometido,

vuelven al formulario frmselection.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.5.

Page 63: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

55

6.1.1.6 frmDatabaseSelection (Instalación modo Servidor).

A través de este formulario el cliente podrá instalarse la base de datos

necesaria para el funcionamiento del entorno de trabajo Discovery. Además,

podrá elegir entre hacerlo utilizando SQL Server 2000, si es que el cliente ya

dispone de este software o hacerlo utilizando MSDE 2000.

Figura 6.1.1.6. Formulario frmDatabaseSelection.

En el caso de que el cliente no disponga de ninguno de los anteriores

programas, se le da la opción de que se instale MSDE 2000, ya que éste es un

software del cual Microsoft permite su libre distribución.

Como para instalar la base de datos es necesario que el cliente especifique

ciertos parámetros, desde este formulario se accederá a otros donde estos

datos serán solicitados.

Cuando el cliente selecciona la opción de instalar MSDE 2000, debemos

cerciorarnos primero de que no lo tiene ya instalado, para ello se hizo un

estudio para ver como podíamos saber si un usuario lo tenía instalado o no. De

Page 64: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

56

este estudio decidimos que la mejor manera para saberlo es observando el

registro de Windows, ya que seguramente en él se almacenaría algún dato que

nos lo indicará. Y efectivamente así es, ya que mirando en el registro vemos

que la clave:"LocalMachine\SOFTWARE\Microsoft\Microsoft SQL Server"

existe, y por tanto que será nuestra señal para determinar que MSDE 2000 ya

está instalado.

El resto de botones actuarán como accesos a otros formularios. Así, el

botón “Install Database in SQL Server 2000” nos llevará al formulario donde se

instalará la base de datos especificándole a dicho formulario que se desea

instalarla utilizando SQL Server 2000. Del mismo modo, cuando pulsamos

sobre el botón “Install Database in MSDE 2000”, se pasará al mismo formulario

pero especificando que se quiere emplear MSDE 2000.

Por último el botón “Back” nos lleva de nuevo al formulario frmSelection.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.6.

6.1.1.7 frmMSDE2000Finish (Instalación modo Servidor).

Cuando se instala MSDE 2000 en el equipo del cliente, es necesario que se

reinicie el sistema para poder instalar la base de datos bajo esa herramienta.

Es por ello que se creó este formulario, que avisa al cliente de tal información.

Figura 6.1.1.7. Formulario frmMSDE2000Finish.

Page 65: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

57

Además le da la posibilidad al cliente de que reinicie su equipo desde la

misma aplicación. Ésta es una tarea bastante compleja, y para acometerla se

ha programado un módulo (módulo Reboot) que engloba las funciones y

procedimientos necesarios para tal fin.

Cuando el cliente pulsa sobre el botón “Finish without restarting” se sale de

la aplicación de instalación. Para ello, se descarga el formulario actual y como

éste es el único activo en ese momento, se saldrá de la aplicación.

Una vez que el usuario ha reiniciado su equipo, la instalación de MSDE

2000 toma efecto, con sus consecuentes cambios en la configuración del

sistema del cliente. Entre ellos, el que nos permite identificar si MSDE 2000

está instalado o no. Esta tarea la desempeña (como ya hemos explicado) el

formulario anterior frmDatabaseSelection chequeando para ello el registro de

Windows en busca de la llave “LocalMachine\SOFTWARE\Microsoft\Microsoft

SQL Server", que tras la instalación hecha en este formulario y tras el reinicio

del sistema deberá a existir y por lo tanto no se permitirá en el formulario

anterior su re-instalación.

Así pues, volviendo al formulario anterior y para facilitar una mejor

comprensión de esta aplicación, seguimos la explicación con el siguiente paso

de la aplicación de instalación. Es decir, una vez reiniciado el sistema y de

vuelta en el formulario frmDatabaseSelection el cliente deberá especificar si

quiere instalar la base de datos utilizando SQL Server 2000 o MSDE 2000. Una

vez que el cliente ha decidido que instrumento utilizar para instalar la base de

datos, e independientemente de la elección escogida, se procederá a instalarla

en el siguiente formulario: frmSetUpInServer, en donde se distinguirá entre una

opción u otra.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.7.

Page 66: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

58

6.1.1.8 frmSetUpInServer (Instalación modo Servidor).

A este formulario se llega desde el formulario frmDatabaseSelection cuando

se selecciona cualquiera de los dos botones para instalar la base de datos.

Para controlar que opción escogió el cliente, se mirará en la variable global

strDatabaseFlag que nos dirá si prefirió instalar la base de datos utilizando SQL

Server 2000 o MSDE 2000. La diferencia, a efectos de la instalación, entre las

dos opciones reside en la herramienta para crear la base de datos por la línea

de comandos, que en el caso de SQL Server se llama ISQL y en el caso de

MSDE 2000 se llama OSQL.

Figura 6.1.1.8. Formulario frmSetUpInserver.

El cliente tan solo tendrá que especificar donde quiere almacenar los

ficheros de la base de datos y los ficheros LOG, para lo que se le facilita un

formulario “Browser” donde podrá elegir o crear el directorio determinado. Para

Page 67: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

59

conocer si dicho formulario está destinado a seleccionar la ubicación del

fichero de la base de datos o del fichero LOG, se usa una variable global que lo

indicará (strOrigin). De este modo podremos utilizar un único formulario

Browser para ambos cometidos. Dicho formulario se explicará en el próximo

apartado.

Además, debido a que SQL Server permite que el cliente pueda tener varias

versiones instaladas pero con diferentes instancias, el formulario añade la

posibilidad de que el usuario especifique una instancia determinada donde

instalar la base de datos.

Se obligará al cliente a especificar una ubicación para el fichero de la base

de datos y para el fichero LOG, de tal modo que hasta que estos no sean

elegidos no se habilitará el botón “Next” que instala la base de datos. Asimismo,

cuando se selecciona una ubicación para uno de los dos tipos de ficheros, está

se auto-seleccionará para el otro tipo también, ya que lo más común es que

ambos estén en el mismo directorio; aun así, el cliente tiene siempre la

posibilidad de elegir ubicaciones diferentes.

Por último, y tal y como se ha ido realizando en formularios anteriores, se

usará el registro de Windows para almacenar información que puede ser útil

para el cliente en re-instalaciones. De este modo, de este formulario se

guardarán las ubicaciones para el fichero de la base de datos y el fichero LOG,

así como de la instancia. Una vez instalada la base de datos, si el cliente quiere

volver a instalarla o modificarla, esos datos aparecerán por defecto escritos en

el formulario.

Cuando el cliente ha rellenado los textboxes (el de instancia es opcional) y

pulsa sobre el botón “Next” se procede a la instalación de la base de datos.

Tarea que resulta bastante tediosa debida a la obligatoriedad de tener un alto

grado de confidencialidad y por tanto de usar código complejamente encriptado.

Para ello se realizan los siguientes pasos:

- Se desencripta el fichero Encryp.enc que está en el CD de instalación

dado al cliente y que contiene parte de la información de la base de

datos pero de forma encriptada. Dicho fichero se desencripta y se

Page 68: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

60

guarda en un fichero llamado filler.sql (fichero de relleno) en el

directorio “Archivos de programa\Satcom Discovery”.

- Se localiza el directorio temporal del ordenador del cliente y se crea allí

un fichero llamado SatcomSQL.sql que contendrá toda la información

de la base de datos a instalar, y que será el fichero que posteriormente

utilizaremos con la herramienta ISQL ó OSQL para instalar la base

datos. Este fichero constará de una cabecera fija, que describe el

tamaño y la topología de la base datos, y del resto de la base de datos

como son las distintas tablas, procedimientos y funciones. La cabecera

será fija y estará escrita en este formulario, mientras que el resto de la

base de datos estará en el CD de instalación en el fichero Encryp.enc,

que en el paso anterior hemos traducido al fichero filler.sql. Así pues,

copiamos primero la cabecera y luego el contenido de filler.sql en el

fichero SatcomSQL.sql. El motivo de tanto movimiento es que no se

quiere que el poseedor del CD pueda acceder a los datos, para lo que

se decodificarán justo antes de su instalación y se borrarán una vez

que la base de datos esté debidamente instalada.

- Se crea en el directorio temporal un nuevo directorio llamado

SATCOMADDONS, donde se guardarán de forma temporal ficheros

encriptados adicionales que formarán parte de la base de datos;

ficheros que contendrán opciones adicionales de ésta, como pueden

ser nuevas funciones o procedimientos. De esta manera aumentamos

la escalabilidad de la aplicación, ya que tan sólo se necesitará encriptar

un fichero de configuración adicional e incluirlo en esta carpeta para

personalizar la base de datos. De forma estándar, copiaremos desde

el CD de instalación a esta carpeta el fichero encriptado totalfile.enc,

aunque como ya se ha mencionado se podría personalizar en función

de las necesidades del cliente.

- Se añade a nuestro fichero de configuración SatcomSQL.sql la

información procedente de los ficheros que estén en la carpeta

SATCOMADDONS descrita en el paso anterior, para lo que

previamente se desencripta la información.

- Se borra la carpeta SATCOMADDONS del directorio temporal.

Page 69: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

61

- Se utiliza la herramienta ISQL ó OSQL (según se haya elegido SQL

Server 2000 ó MSDE 2000 respectivamente) para instalar la base de

datos según el fichero de configuración que hemos creado:

SatcomSQL.sql.

- Se borra del ordenador el fichero de configuración SatcomSQL.sql y el

de relleno filler.sql. Con lo que no quedará restos ninguno de la

información de la base de datos en el ordenador.

- Finalmente se copia en el registro de Windows la ruta del fichero de la

base de datos y del fichero Log, así como el nombre de la instancia

cuando ésta haya sido usada.

De esta manera, se consigue que si una persona ajena se hace con un CD

de instalación no pueda instalar la base de datos a no ser que sea con la

aplicación de instalación, que asimismo, no se lo permitirá a no ser que

contacte con Satcom para pedir una clave de desbloqueo. Por otro lado, se

logra un alto grado de escalabilidad ya que la base de datos se podrá aumentar

y personalizar simplemente añadiendo ficheros previamente encriptados a un

directorio concreto del CD de instalación (también llamado SATCOMADDONS),

que posteriormente los copiará al directorio SATCOMADDONS en la carpeta

temporal.

Para que se pueda apreciar de forma dinámica el proceso de instalación se

incluye en el formulario una barra de progreso que irá rellenándose a medida

que la aplicación vaya avanzando. Como ocurría con formularios anteriormente

descritos, dicha barra permanece oculta hasta que se procede con la

instalación, momento en el que el formulario aumenta de tamaño y la muestra

en la parte inferior. Al terminar la instalación, el formulario vuelve a su tamaño

normal ocultándola de nuevo.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.8.

Page 70: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

62

6.1.1.9 frmBrowser y frmFolderName (Instalación modo Servidor).

Estos formularios están intrínsicamente ligados al anterior

frmSetUpInServer. El formulario Browser aparece en la aplicación cuando el

cliente pulsa sobre el botón “Browse” para seleccionar la ruta del fichero de la

base de datos o del fichero LOG.

Figura 6.1.1.9.a Formulario frmBrowser.

Su funcionalidad es la típica de un formulario explorador que le facilita al

usuario la tarea a la hora de seleccionar un directorio o de encontrar una ruta

específica. Así pues, el cliente podrá elegir entre las diferentes unidades

gracias a la herramienta de selección colocada en la zona superior, y

finalmente entre los diferentes directorios usando la herramienta de selección

central. También se facilita la posibilidad de crear una nueva carpeta pulsando

sobre el botón “New Folder”, que nos dirigirá al formulario frmFolderName.

Cuando el cliente haya elegido la ruta o creado una nueva y pulse sobre el

botón “OK”, esta información se auto-rellenará en el formulario que llamo a éste,

es decir el frmSetUpInServer visto en el apartado anterior y dependiendo de si

la ruta buscada era para el fichero de la base de datos o para el fichero LOG,

se rellenará un text box de este formulario u otro.

Page 71: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

63

Como ya se ha mencionado, el botón “New Folder” guía la aplicación hacia

el formulario frmFolderName que nos permite crear un nuevo directorio en el

equipo del cliente.

Figura 6.1.1.9.b. Formulario frmFolderName.

Este formulario simplemente le pregunta al cliente el nombre de la carpeta

que quiere crear y la coloca justo en el directorio que estaba seleccionado en el

frmBrowser.

Para un análisis más detallado se incluye el código debidamente comentado

de ambos formularios en los anexos 9.1.1.9 y 9.1.1.10.

6.1.1.10 frmExeFiles (Instalación modo Servidor).

Este formulario constituye la última parte de la aplicación en modo Servidor

y lleva a cabo la instalación de los ficheros ejecutables adicionales necesarios

para el correcto funcionamiento de Discovery.

El aspecto de este formulario se puede apreciar en la siguiente figura

(figura 6.1.1.10).

Page 72: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

64

Figura 6.1.1.10.a. Formulario frmExeFiles.

Dependiendo del tipo de contrato que el cliente haya adoptado con Satcom

podrá instalarse unas aplicaciones u otras. De este modo, si se ha optado por

un seguimiento de las flotas vía GSM, la aplicación sería Satcom GSM Modem,

mientras que si se optó por utilizar GPRS para controlar la posición de los

distintos vehículos, la aplicación adecuada sería Satcom GPRS y el cliente FTP.

Mención aparte merece la aplicación Satcom Configuration, que es una

herramienta necesaria y vital para el correcto funcionamiento de Discovery y

que como tal no se presenta como una instalación opcional, sino obligatoria. El

propósito de dicha aplicación es el de vincular Discovery con la base da datos

creada, y se deberá ejecutar a modo de herramienta post-instalación de

configuración.

Las aplicaciones deberán copiarse del CD de instalación al directorio de

Satcom Discovery creado al inicio de la aplicación en la carpeta “Program Files”.

Asimismo, exceptuando la aplicación Satcom Configuration, el resto deberán

ejecutarse siempre que el cliente inicie su ordenador, problema que

solventamos creando accesos directos de dichos ficheros en la carpeta de

inicio.

Page 73: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

65

Además, este formulario también dispone de unas etiquetas que nos indican

cuales de las aplicaciones están actualmente instaladas.

Figura 6.1.1.10.b Formulario frmExeFiles cuando todo ha sido previamente instalado.

Para lo cual hace uso del registro de Windows para almacenar qué

aplicaciones están instaladas.

Como ya ocurría con anteriores formularios de instalación, éste se ha

proveído con una barra de progreso que informe al cliente de manera gráfica

de la situación de la instalación. Dicha barra está inicialmente oculta y se

mostrará cuando el cliente pulse sobre el botón “install” para luego volver a

ocultarse al finalizar la instalación.

Por último la funcionalidad de los botones es bastante gráfica, el botón

“Install” procede a la instalación de las aplicaciones mientras que el botón

“Back” devuelve la aplicación al formulario frmSelection.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.11.

Page 74: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

66

6.1.1.11 frmClientInstallation (Instalación modo Cliente)

Hasta ahora, hemos estado analizando la parte de la aplicación que en una

configuración distribuida instala todos los componentes correspondientes al

servidor. Cuando estemos en el caso en que el cliente no disponga de una

configuración de red sino de un único ordenador donde iría todo el entorno de

trabajo Discovery, dichos componentes irían ubicados en el ordenador junto

con los componentes asociados a la instalación en modo Cliente sin que con

ello ocurra ningún tipo de conflicto.

Como ya se explicó en el apartado 6.1.1.3, es en el formulario

frmProductKey donde la aplicación de instalación se bifurca según la elección

que el cliente estableció al principio entre instalación en modo Servidor o en

modo Cliente. El presente formulario es el primero en aparecer tras esa

bifurcación y procede a la instalación de la aplicación en modo Cliente.

Figura 6.1.1.11.a. Formulario frmClientInstallation.

Pese a que el aspecto de este formulario pueda resultar algo simple, la

tarea que desarrolla dista mucho de la simplicidad y lleva tras de si bastante

trabajo de investigación. Es debido al axioma que establecimos al principio

acerca de la claridad a vistas del cliente, que se desarrolló este formulario de

una manera que el usuario lo pudiera comprender con sencillez, aunque con

ello se limitara en cierto modo su capacidad de decisión.

El entorno de trabajo Discovery se basa en una aplicación Web que sirve de

interfaz de usuario, y que utilizará el navegador Microsoft Internet Explorer. La

Page 75: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

67

aplicación Web se ubicará en la Intranet de la empresa, utilizando como

servidor Web Internet Information Server (IIS). Para que no ocurran

incompatibilidades se debe configurar la seguridad de la Intranet, tarea que se

puede realizar cambiando ciertos parámetros de Internet Explorer relacionados

con las ActiveX. En concreto, los cambios serán activar la casilla de “Inicializar

y activar la secuencia de comandos de los controles ActiveX no marcados

como seguros” y marcar en “Pedir Datos” bajo la opción de “Descargar los

controles no firmados para ActiveX”. El por qué de esta configuración, es

debido a que en la aplicación Web se introduce un frame creado como control

ActiveX donde irá situado el mapa elegido por el cliente y que no está marcado

previamente como seguro, por lo que se deberán emplear estos cambios para

que se pueda utilizar correctamente.

Figura 6.1.1.11.b. Configuración de seguridad de Intranet a cambiar en Internet Explorer.

Además, a lo largo de está aplicación y más concretamente en el formulario

frmIISServerName, se incluirá a la aplicación Web dentro de los Sitios de

Confianza definidos por Internet Explorer y que por tanto se consideran que no

van a perjudicar al ordenador ni a su información. Del mismo modo, también se

Page 76: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

68

cambiará la configuración de seguridad para estos Sitios de Confianza

activando tanto la opción “Inicializar y activar la secuencia de comandos de los

controles ActiveX no marcados como seguros” como la opción “Descargar los

controles no firmados para ActiveX”.

Estas opciones de configuración son fáciles de cambiar desde la sección de

seguridad de las opciones de internet del Internet Explorer, pero se trata de

hacerlo de manera automática y sin intervención del cliente, ya que se trata de

un tema que seguramente éste desconozca. La manera de llevarlo a cabo nos

llevo bastante tiempo de indagación, optándose finalmente por investigar los

cambios que Internet Explorer hacía en el Registro de Windows cada vez que

se cambiaba una configuración de seguridad. De este modo, se concluyó que

Internet Explorer almacena su configuración en el Registro y que por tanto

desde allí se puede modificar ésta. La dificultad estaba ahora en encontrar la

clave donde se producían los cambios y como realizarlos. Lo primero se

solventó mediante un programa que comparaba el contenido del registro en

dos instantes distintos y mostraba los cambios, con lo que se ubicó la clave y el

valor concreto que cambiaba. El realizar los cambios automáticamente

mediante programación, se realizó utilizando un conjunto de API´s declaradas

en el módulo EditRegistry, que nos permiten controlar la información

almacenada en el Registro de Windows.

Por último, este formulario instala y registra los ficheros Dll y/o OCX

necesarios para la instalación en modo Cliente. Todo esto se realiza cuando el

cliente accede a la instalación y pulsa sobre el botón “Install”, en caso contrario,

si pulsa sobre el botón “Cancel” se saldrá de la aplicación de instalación.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.12.

Page 77: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

69

6.1.1.12 frmClientInstallation2 (Instalación modo Cliente).

La parte principal de la instalación en modo Cliente es la instalación de un

Software de mapeo que permita seguir las rutas de cada uno de los vehículos.

Dicho software debe ser fácilmente actualizable debido al continuo cambio de

las carreteras, además de que debe ofrecer una calidad de detalle muy alta

para presentar los callejeros de las poblaciones más recónditas.

La solución adoptada fue la de instalar por defecto el software de mapeo

InfoMap ya que cumple notablemente con todas estas necesidades.

Figura 6.1.1.12. Formulario frmClientInstallation2.

Este formulario instala los componentes necesarios para la utilización de los

diferentes mapas proporcionados por InfoMap, así como sus actualizaciones.

De este modo, una vez instalado el entorno de trabajo Discovery, el cliente

podrá instalar cualquier mapa dado por InfoMap y éste interactuará

correctamente con Discovery.

Cuando el cliente pulsa sobre el botón “Skip” se entiende que ya tiene

instalado dichos componentes de InfoMap, por lo que se pasa al siguiente paso

de la instalación en modo Cliente (frmIISServerName).

En el caso de que el cliente pulse sobre el botón “Next” se procederá a la

instalación de estos componentes, para lo que se ejecutará el fichero “InfoMap

Components 3.0 EN” situado en el CD de instalación en la carpeta “EXEFILES”.

Page 78: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

70

Una vez instalado se pasará a un formulario intermedio frmPJSoftLicenseFiles

donde se llevarán a cabo las acciones necesarias para cumplir con los ficheros

de licencia.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.13.

6.1.1.13 frmPJSoftLicenseFiles y PJSOftBrowser (Instalación modo

Cliente).

El formulario frmPJSoftLicenseFiles se encargará de instalar correctamente

los ficheros de licencia de InfoMap. Estos deben ubicarse en la carpeta

“ActiveX” dentro de la carpeta donde InfoMap Components 3.0 EN haya sido

instalado, además de en la carpeta de sistema “System32”. Por tal motivo, se

deberá preguntar al cliente donde acaba de instalar InfoMap Components y así

trazar la ruta adecuada para ubicar los ficheros de licencia.

Figura 6.1.1.13.a. Formulario frmPJSoftLicenseFiles.

Como se puede apreciar, el formulario facilita la acción al cliente en caso de

que a la hora de instalar InfoMap Components lo hiciera en la ruta por defecto,

escribiendo tal ruta en su lugar.

Page 79: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

71

Cuando el cliente rellene el text box de la ruta y pulse sobre el botón “Next”

procederá a la instalación de los ficheros de licencia, para lo que primero se

comprobará que la ruta dada es correcta y contiene una carpeta llamada

“ActiveX”, en caso contrario se dará un mensaje de error.

Además se le facilita al usuario un formulario browser para que pueda

seleccionar la carpeta buscada de forma gráfica. Dicho formulario

(frmPJSOftBrowser) se cargará cuando se pulse sobre el botón “Browse” y

desempeñará las funciones habituales de un browser, es decir las de posibilitar

la elección de forma gráfica de una determinada ruta.

Figura 6.1.1.13.b. Formulario frmPJSOftBrowser.

En él, el cliente podrá seleccionar cualquier carpeta de cualquiera de los

discos de los que disponga en su ordenador. Una vez seleccionada, tras pulsar

el botón “Ok” se volverá al formulario frmPJSoftLicenseFiles donde se colocará

la ruta escogida. Con el botón “Cancel” tan solo se cierra el Browser, volviendo

al formulario anterior.

Para un análisis más detallado se incluye el código debidamente comentado

de ambos formularios en los anexos 9.1.1.14 y 9.1.1.15.

Page 80: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

72

6.1.1.14 frmIISServerName (Instalación modo Cliente).

Este es el último formulario perteneciente a la instalación en modo Cliente y

se encarga de nombrar la aplicación Web y crearle un acceso directo en el

escritorio de Windows. Además, coloca esta aplicación Web dentro de los

“Sitios de confianza” del navegador Internet Explorer.

Figura 6.1.1.14. Formulario frmIISServerName.

Generalmente, el servidor IIS tiene el mismo nombre que el nombre del

equipo, por lo que nuestro formulario mostrará este nombre por defecto para

hacer la instalación más fácil para el cliente. En caso de que el nombre sea

distinto, el usuario no tiene más que cambiarlo.

Cuando ya se ha hecho previamente una instalación en modo Cliente, el

text box se auto-rellena con el nombre escogido con anterioridad, para lo que

utiliza el registro de Windows para almacenarlo en el ordenador del usuario.

Para incluir el nombre de la aplicación Web en los “Sitios de confianza”

primero se realizó un estudio de cómo se podía realizar de manera automática,

estudio del que se sacó la conclusión de utilizar el registro de Windows ya que

el navegador Internet Explorer almacena casi toda su información en él. Así,

estudiando la clave apropiada del registro y viendo sus cambios al introducir un

nuevo link en los sitios de confianza de manera manual, deducimos los pasos

a seguir por la aplicación. Para ello, en el caso de que el nombre del servidor

coincida con el nombre del equipo (caso más general), se colocará una nueva

Page 81: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

73

clave en el registro llamada “localhost” incluyendo en ella un valor llamado

“http” donde almacenaremos un 2. Cuando el nombre del servidor sea distinto,

se creará la nueva clave con el nombre de este servidor y en ella se incluirá un

valor llamado “http” donde almacenaremos un 2.

Por último, una vez terminada la instalación se pasa al formulario frmFinish

que dará por terminada la aplicación.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.1.16.

6.1.1.15 frmFinish y frmFinishWithoutInstall.

A lo largo de la aplicación hemos ido utilizando la variable booleana global

boAnyInstalled para marcar si se ha instalado algo en el ordenador del cliente.

Su empleo se debe a la naturaleza de la aplicación, ya que ésta no se

desarrolla de forma continua de principio a fin, sino que dependiendo de lo que

el cliente quiera instalar la aplicación seguirá un camino u otro. Por ello habrá

veces en las que el cliente sólo trate de instalar por ejemplo la aplicación

COM+ en un ordenador o incluso cuando llegue al formulario central de la

instalación en modo servidor y vea que ya está instalada decida no instalar

nada. Debemos diferenciar las ocasiones en las que el cliente instala algo y

cuando no, ya que en el primer caso se deberá reiniciar el ordenador para que

lo instalado funcione correctamente.

Así pues, en el caso de que se haya instalado algún software, se debe dar

la posibilidad al usuario de elegir entre si quiere finalizar la aplicación sin más o

si quiere hacerlo reiniciando el ordenador. Es esta la función del formulario

frmFinish, que se cargará siempre que el cliente decida finalizar la aplicación

de instalación y la variable boAnyInstalled contenga el valor TRUE. En caso de

que su valor sea el de FALSE, se pasará a cargar el formulario

frmFinishWithoutInstall que simplemente dará un mensaje de despedida.

Page 82: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

74

El aspecto del formulario frmFinish es el siguiente:

Figura 6.1.1.15.a. Formulario frmFinish.

La tarea de reiniciar el ordenador es bastante compleja ya que se necesita

de ciertos privilegios en el ordenador en cuestión para que a través de una

aplicación se pueda reiniciar el equipo. Por ello, se programan una serie de

funciones agrupas en un nuevo módulo (módulo Reboot) que desarrollarán

todo este complicado trabajo.

Además, en este formulario se le informa al cliente del código del producto

que acaba de instalar así como del código de desbloqueo utilizado. Dichos

códigos son a su vez copiados en un fichero de texto situado dentro de la

carpeta de Satcom Discovery. Los dos códigos mostrados son obtenidos a

partir de las variables globales que los almacenan, strProductSerialNumber y

strUnlockKey, y son copiados al cargarse el formulario.

El formulario frmFinishWithoutInstall simplemente informa al cliente de que

no se ha instalado ningún tipo de software en su ordenador y que se ha

finalizado con la aplicación de instalación.

Page 83: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

75

El aspecto de este formulario es el siguiente:

Figura 6.1.1.15.b. Formulario frmFinishWithoutInstall.

Cuando el cliente pulse sobre el botón “Finish” se finalizará la aplicación de

instalación.

Para un análisis más detallado se incluye el código debidamente comentado

de ambos formularios en los anexos 9.1.1.17 y 9.1.1.18.

Page 84: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

76

6.1.2 Módulos.

Hasta ahora hemos visto lo que podemos denominar la estructura externa

de la aplicación de instalación, constituida por los formularios que guían al

cliente durante todo el proceso. Pero éstos no podrían constituir la aplicación

por si solos, ya que ésta necesita de variables y constantes globales,

declaraciones de APIs y funciones y procedimientos que implementen

funcionalidades comunes necesitadas por varios formularios.

La columna vertebral de la aplicación la constituyen los módulos, donde se

desarrollan las funciones y procedimientos empleados en cada formulario.

Además, para seguir un modo de programación ordenado, dependiendo de la

naturaleza o funcionalidad de cada función o procedimiento, se ha almacenado

en un módulo u otro. Con lo que se desarrolla el trabajo de una manera mucho

más ordenada y fácil de seguir. En total se han creado 7 módulos, uno de los

cuales es un módulo de clase que nos permitirá trabajar con un nuevo tipo de

objeto.

Dentro de cada módulo podemos encontrarnos con diferentes elementos

como son funciones (devuelven algún valor), procedimientos (no devuelven

ningún valor), declaraciones de APIs, declaraciones de variables globales y

declaraciones de constantes. Todo lo que haya en los módulos podrá ser

accesible por los formularios, es por esto que se colocan ahí las declaraciones

globales.

En los anexos se incluye el código debidamente comentado sirviendo de

análisis detallado de cada una de las funciones y procedimientos que los

módulos contienen.

6.1.2.1 Módulo Principal (Main Module).

Este es el módulo donde se almacenan las funciones más comunes de la

aplicación, así como las constantes, variables y declaraciones de APIs.

Page 85: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

77

En el anexo 9.1.2.1 se analizarán cada una de estas partes por separado,

haciendo un estudio del código empleado para cada una de ellas.

Entre las funciones que engloba, cabe destacar la función CheckVersion

que nos permite conocer cúal entre dos ficheros tiene una versión mas

actualizada. Un ejemplo del funcionamiento de esta función se incluye en el

anexo 9.6.

6.1.2.2 Módulo EditRegistry.

Este módulo engloba las funciones, procedimientos y APIs necesarias para

la edición del registro de Windows. Ésta es una tarea de gran importancia ya

que nos permite usar el registro como lugar de almacenamiento para nuestros

parámetros de configuración. Además, como se ha ido explicando a lo largo de

este documento, necesitamos de consultas y modificaciones en el registro para

conseguir ciertos de nuestros objetivos, como son el cambio de los parámetros

de seguridad de Microsoft Internet Explorer o el averiguar si MSDE 2000 está

instalado.

Teniendo en cuenta que el registro de Windows almacena gran parte de la

configuración de éste y que su más pequeña modificación puede ocasionar

daños en el sistema, el diseño de estas funciones se ha realizado con sumo

cuidado y testado en varias ocasiones para comprobar su correcto

funcionamiento.

El módulo consta de funciones, procedimientos, declaraciones de APIs y

constantes globales necesarias para estas últimas. No se introdujeron variables

globales en este módulo.

En el anexo 9.1.2.2 se analizarán cada una de estas partes por separado,

haciendo un estudio del código empleado para cada una de ellas.

Page 86: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

78

6.1.2.3 Módulo EncrypFile.

Una de las bases sobre la que desarrollar la aplicación de Instalación era la

de confidencialidad. Debido a ella, el fichero de configuración de la base de

datos a través del que ésta se construye se codifica y se ubica en el CD de

instalación totalmente encriptado, de manera que sea totalmente ilegible.

Es la propia aplicación de instalación la que regenera el fichero de la base

datos, crea ésta y finalmente borra de nuevo el fichero.

El modo en que se encripta el fichero no es tarea de esta aplicación, sino

que se desarrolló de forma paralela a ésta en la Aplicación de Encriptación que

se detallará posteriormente.

En este módulo se engloban un procedimiento y una función que nos

permitirán desencriptar los ficheros de la base de datos situados en el CD de

instalación para así crear un fichero desencriptado con el que desarrollar la

base de datos. El procedimiento desencripta el fichero que se le pasa por

parámetro, para lo que hace uso de la función que desencripta el carácter que

se le pasa.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.2.3.

6.1.2.4 Módulo Reboot.

Este es un elaborado módulo donde se hace posible que el cliente pueda

reiniciar su sistema a través de la aplicación. Para conseguirlo, la aplicación

primero tendrá que conseguir los privilegios necesarios que le den autoridad

suficiente para controlar tal evento.

Para un mejor manejo de los privilegios y de los datos que se utilizan en el

módulo se crean ciertas estructuras de datos. Para ello se usa el comando

Type, que tiene funciones similares al comando struct en el lenguaje de

programación C.

Page 87: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

79

El módulo hace uso de algunas APIs para lograr su propósito, lo que

conlleva el parejo uso de constantes globales que se declaran tras estas APIs.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.2.4.

6.1.2.5 Módulo SerialNumber.

Las funciones y procedimientos englobados en este módulo se encargan de

la autentificación del cliente. Para ello realiza la identificación del producto y

hace que éste adquiera un código de producto único. El cliente deberá ponerse

en contacto con Satcom y proporcionarle tal código, con el que Satcom

averiguará el código de desbloqueo que proveerá al cliente. Con esto

conseguimos que Satcom tenga un alto control sobre la distribución de

Discovery.

La aplicación de Instalación también necesita saber como conseguir este

código de desbloqueo, ya que debe comparar el que introduce el usuario con el

verdadero para decidir si le permite continuar con la aplicación o no. En caso

de que el número de intentos exceda a 4, se le comunicará al cliente que se

ponga en contacto con Satcom y se cerrará la aplicación de instalación.

Para obtener un número único identificativo de la máquina del cliente sobre

el que elaborar un código de producto utilizamos la API GetVolumeInformation

que nos da el número de formato de la unidad de disco duro colocada como

master.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.2.5.

Page 88: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

80

6.1.2.6 Módulo VersionVerify.

Para el correcto funcionamiento del entorno de trabajo Discovery es

necesario la instalación de varios ficheros de librerías de extensión *.Dll y

*.OCX. Pero esta instalación no debe hacerse sin antes comprobar que la

versión que vamos a instalar no es más antigua que la que actualmente

dispone el ordenador del cliente.

Con este objetivo se crearon un conjunto de funciones y procedimientos

que nos permite comprobar que los ficheros a instalar están más actualizados

que los que ya existen. En caso contrario, o en el caso de que la versión

coincida, los ficheros no se instalarán y se respetarán los que el usuario ya

tenga instalados.

La función principal que se encarga de estas tareas, CheckVersion, está

situada en el módulo principal y por tanto ya ha sido explicada anteriormente.

Pero esta función hace uso de otras funciones y procedimientos para

conseguir su función. Estas son las funciones y procedimientos que están

ubicadas en este módulo.

Este módulo no engloba declaraciones de variables, constantes o APIs, sino

que solamente contiene funciones y procedimientos.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.2.6.

6.1.2.7 Módulo de Clase IISVirtualDirectory.

Gracias a este módulo de clase conseguimos crear un objeto nuevo que se

ciñe a nuestras necesidades para configurar nuestra aplicación Web en un

directorio virtual de Internet Information Server (IIS).

Page 89: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

81

Este nuevo objeto será llamado con el nombre del módulo de clase, es decir

IISVirtualDirectory, y nos permitirá tratar con difíciles opciones de configuración

del IIS a través de nuestra aplicación de instalación.

El desarrollo de este módulo es anterior a la aplicación de instalación, y ya

fue usado en un proyecto anterior de Satcom Technology. Aun así se necesita

adecuarlo a la situación y necesidades de este proyecto. Por ello,

fundamentalmente se debe prestar atención a la función Create, que es donde

estos cambios tienen lugar.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.1.2.7, donde se indicarán los cambios acontecidos para

adecuarlo a nuestros requisitos.

Page 90: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

82

6.2 Aplicación de encriptación.

Paralelamente a la aplicación de instalación, se deben desarrollar otras

aplicaciones que nos permitan conseguir cumplir con requisitos tales como la

confidencialidad y el control de la distribución del producto.

Como ya se ha explicado, a la hora de crear el CD de instalación se

introducirán en él los ficheros que nos permitan crear la base de datos en el

equipo del cliente. Pero al ser ésta personalizada, se necesita de algún

mecanismo de seguridad para evitar que alguien ajeno pueda hacerse con tal

información.

El método escogido fue el de introducir los ficheros de la base de datos de

manera encriptada en el CD de instalación, de manera que la aplicación de

instalación los desencriptará y los englobará en un único fichero de

configuración que bien usando la herramienta isql ó osql (dependiendo si el

cliente ha elegido SQL Server 2000 o MSDE2000 respectivamente) creará la

base de datos.

Pero para conseguirlo, primero se necesita de una aplicación de

encriptación que nos permita encriptar los ficheros de la base de datos para

colocarlos en el CD de instalación. Y éste es el cometido de esta aplicación.

La aplicación está desarrollada en Visual Basic y consta de un formulario

(frmEncryp) y de un módulo (EncrypModule).

6.2.1 Formulario frmEncryp.

Este formulario nos sirve de interfaz de usuario para realizar la encriptación

de los ficheros.

Page 91: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

83

Figura 6.2.1. Formulario frmEncryp.

Para usar correctamente el formulario, el cliente debe primero rellenar el

text box antecedido por la palabra “File” con la ruta del fichero que quiere

encriptar, tras lo que deberá indicar en el text box “Into” donde quiere colocar el

fichero resultado de la encriptación. Una vez rellenados estos dos campos, ya

se podrá realizar la encriptación pulsando sobre el botón “Encryp”. La

encriptación finalizará cuando se nos muestre un mensaje por pantalla

indicándolo.

Adicionalmente se incluye la posibilidad de desencriptar el fichero recién

encriptado rellenando la casilla “Unencryp into” con la ruta completa en la que

queremos colocar el fichero resultado. Tras lo que no tendremos más que

pulsar sobre el botón “Unencryp” y esperar a que se nos muestre un mensaje

indicando que se ha realizado correctamente.

En el gráfico anterior se muestra el formulario relleno con un ejemplo de

utilización, donde si pulsamos sobre el botón “Encryp” se crearía el fichero

FICHERO_ENCRIPTADO.enc a partir del fichero

Page 92: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

84

FICHERO_BASE_DE_DATOS.sql y en la ruta indicada en el text box. Además

si el usuario pulsará sobre el botón “Unencryp”, la aplicación desencriptaría el

FICHERO_ENCRIPTADO.enc creando el fichero

FICHERO_RECUPERADO.txt en la ruta especificada, o sea en C:\.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.2.1.

6.2.2 Módulo EncrypModule.

Aquí es donde se sitúan las funciones empleadas por el formulario y que

permiten hacer la encriptación y la desencriptación.

Está compuesto por los dos procedimientos a los que llama el formulario,

Enc_File y Unencryp_File a los que se les pasa por parámetro las rutas de los

ficheros a encriptar/desencriptar y la ruta donde ubicar el fichero resultado;

además de la clave para realizarla. Pero además, estos dos procedimientos

Sub hacen uso de una función cada uno que les realizará la

encriptación/desencriptación de los caracteres que se le pasen como

parámetro. Estas funciones son la función Encrypter y la función Unencrypter.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.2.2.

Page 93: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

85

6.3 Aplicación del Código de Desbloqueo.

Una de los principales fundamentos de la aplicación de instalación es la

necesidad de llevar un estricto control sobre los clientes que adquieren el

producto Discovery.

La solución que se llevo a cabo fue crear un sistema de código de producto

y código de desbloqueo, de tal modo que sólo conociendo el código de

desbloqueo asociado a su código de producto, el cliente podrá continuar con la

Aplicación de Instalación.

De esta manera conseguimos que sólo clientes autorizados por Satcom

puedan hacer uso de la aplicación, pero al mismo tiempo esto nos permite

llevar un control de los clientes que usan el producto, ya que estos necesitan

ponerse en contacto con Satcom para obtener su código de desbloqueo.

Esta es la aplicación que estaría en la oficina de Satcom, de tal manera que

cuando un cliente llame y de su código de producto, con éste se generará su

código de desbloqueo que le dará acceso a la aplicación de instalación.

Para llevar a cabo tal código, la aplicación consta de un formulario y de un

módulo.

6.3.1 Formulario frmProductKeyMaker.

Consiste en el interfaz que le permite al personal de Satcom encontrar la

clave de desbloqueo partiendo de un código de producto y de una clave de

codificación.

Page 94: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

86

Figura 6.3.1. Formulario frmProductKeyMaker.

El usuario tan solo deberá rellenar el text box precedido por la palabra

“Prekey” con el código del producto dado por el cliente y pulsar sobre el botón

“Get the Product Key !!!!” tras lo que el código de desbloqueo aparecerá en el

text box “Product Key”.

El código de este formulario es sencillo y se basa en una llamada a una

función del módulo de la aplicación que le devuelve el código de desbloqueo.

El módulo en si no se diferencia del ya explicado en la Aplicación de

Instalación en su módulo SerialNumber, módulo que ya se ha explicado y que

por tanto no se va a volver analizar.

Para un análisis más detallado se incluye el código debidamente comentado

en el anexo 9.3.1.

Page 95: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

87

6.4 Creación del CD de Instalación.

Una cuestión importante de la Aplicación de Instalación es como organizar

los ficheros y directorios necesarios para la aplicación en el CD de instalación.

Se debe seguir una estructura simple, legible y coherente con lo que es la

aplicación, ya que esta será la que se adentre en el CD para buscar los

ficheros que necesite. Así pues ante cualquier cambio que se haga en el CD de

instalación se deberá actualizar la aplicación ya que puede que sino ésta llegue

a un error de localización.

El contenido del CD de instalación debe ser como el de la siguiente figura,

respetando siempre la nomenclatura usada.

Figura 6.4. Estructura del CD de instalación.

Page 96: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

88

Donde los archivos sueltos son la aplicación de instalación en sí

(setupproject.exe) y el fichero que contiene la información de la base de datos

encriptado (encryp.enc).

Este último fichero es previamente creado por la Aplicación de Encriptación

ya que contiene configuraciones personalizadas para la empresa cliente en

cuestión.

Se especificará ahora el contenido de cada directorio.

6.4.1 Directorios y Subdirectorios.

6.4.1.1 Directorio Com.

Este directorio contiene los componentes COM+, almacenados en dos

ficheros satcom.msi y satcom.msi.cab, tal y como se generaron tras hacer una

exportación de componentes desde la herramienta del sistema “Servicios de

componentes”, como ya se explicó al principio del presente proyecto en el

apartado 4.1.

El aspecto de la carpeta es por tanto el siguiente:

Figura 6.4.1.1. Estructura del directorio “com”.

Page 97: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

89

6.4.1.2 Directorio DLL´s & OCX´s:

Este directorio contiene las librerías Dll ó OCX necesarias para el correcto

funcionamiento del entorno de trabajo Discovery y de la aplicación de

Instalación.

Para una mejor lectura, esta carpeta se ha divido en cuatro subdirectorios,

donde se organizan los archivos DLL y OCX según su funcionalidad.

Además, si en un futuro se necesitan instalar más librerías para una posible

mejora de Discovery, tan solo bastaría con incluir dichos archivos en la

subcarpeta correspondiente y la aplicación de instalación se encargaría de

instalarlas y registrarlas en el equipo del cliente automáticamente.

Este directorio tiene por tanto la siguiente estructura:

Figura 6.4.1.2. Estructura del directorio “DLL´s & OCX´s”.

Donde cada subcarpeta contiene:

- ClientDll´s: contiene las librerías necesarias para la instalación en

modo Cliente.

- DLLNoVersion: esta subcarpeta contiene las librerías que no poseen

número de versión alguno. Se agrupan en una carpeta aparte ya que

no se puede ver si son más actuales que las que el cliente pueda tener

Page 98: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

90

ya instaladas. Como son librerías creadas por Satcom, se instalarán

siempre.

- Installation OCX´s: contiene las librerías que nos permiten ejecutar la

aplicación de instalación. En un principio el único fichero que contiene

es el que nos permite introducir barras de progreso en la aplicación.

Pero si en un futuro fuera necesario introducir más librerías tan solo

habría que colocarlas en esta carpeta.

- Server DLL´s: este subdirectorio contiene las librerías necesarias para

la instalación en modo Servidor.

6.4.1.3 Directorio EXEFILES.

Es donde se engloban todos los ficheros ejecutables utilizados. La

aplicación de instalación se dirigirá a esta carpeta cada vez que quiera ejecutar

o copiar alguno de ellos a la máquina del cliente.

Figura 6.4.1.3. Estructura del directorio “EXEFILES”.

Page 99: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

91

6.4.1.4 Directorio Icons.

Es donde se encuentran los iconos utilizados por la aplicación de instalación.

Actualmente tan solo se utiliza uno, por lo que sólo éste aparecerá en este

directorio, pero si en un futuro se necesitan de más iconos habrá que situarlos

en la misma carpeta.

Figura 6.4.1.4. Estructura del directorio “Icons”.

6.4.1.5 Directorio IISFOLDER.

Esta carpeta contiene una subcarpeta llamada Satcom con la aplicación

Web en la que se basa el entorno de trabajo Discovery. Será la carpeta que se

copiará en un directorio virtual de Internet Information Server (IIS).

6.4.1.6 Directorio MSDE.

Este es el directorio donde se ubica MSDE2000, y a partir del que se

instalará este software de libre distribución. Contendrá un fichero de instalación

y un conjunto de ficheros y directorios que éste necesitará para su ejecución.

Su estructura será la indicada en la siguiente figura.

Page 100: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

92

Figura 6.4.1.6. Estructura del directorio “MSDE”

6.4.1.7 Directorio PJSoft License.

A lo largo de la instalación en modo Cliente, se instala un componente de

mapeo (InfoMap Components EN 3.0) que necesita que se manejen unos

ficheros de licencia de manera correcta para que el software funcione.

Esta carpeta contiene dichos ficheros de licencia.

Figura 6.4.1.7. Estructura del directorio “PJSoft License”.

Page 101: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

93

6.4.1.8 Directorio SATCOMADDONS.

Esta carpeta contiene los ficheros que son añadidos al fichero Encryp.enc

para crear la base de datos. Por lo general se trata de funciones añadidas y

actualizadas a la medida del cliente, así, de esta manera, conseguimos que

para actualizar la base de datos tan sólo tengamos que añadir en esta carpeta

el fichero actualizado.

Todos los ficheros que estén en esta carpeta están encriptados por la

Aplicación de Encriptación y será la Aplicación de Instalación la que los

desencriptará mientras se ejecuta, instalando la base de datos.

Actualmente toda esta información adicional se ha englobado en un único

fichero “totalfile.enc”, pero podría añadirse a modo de diferentes ficheros. En

este caso la aplicación reuniría la información procedente de ellos y los

englobaría automáticamente.

Por lo tanto si se quiere actualizar la base de datos con nuevos

procedimientos y funciones, tan solo hay que encriptar el/los fichero/s que las

declare utilizando la aplicación de encriptación y luego colocar dicho/s fichero/s

en esta carpeta.

El aspecto actual de este directorio es el siguiente:

Figura 6.4.1.8. Estructura del directorio “SATCOMADDONS”.

Page 102: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

94

7. Instrucciones Post-Instalación.

Satcom Discovery es una compleja combinación de aplicaciones diseñadas

y desarrolladas para obtener el mejor rendimiento del equipo del usuario.

Proveyendo al cliente de una potente herramienta de seguimiento basada en

una base de datos hecha a medida.

Una vez que la Aplicación de Instalación ha realizado su cometido, el cliente

debe realizar una pequeña configuración para adecuar el entorno de trabajo

Discovery a su ordenador.

Consiste en poner a punto los programas que la Aplicación de Instalación

ha instalado. Para una mejor comprensión se estudiarán estos cambios uno por

uno en función de la aplicación en cuestión, ya que debido a la naturaleza

distribuida de Discovery, cada computador deberá configurar lógicamente sólo

los programas que haya instalado.

7.1 SQL Server o MSDE 2000.

Para poder poner en funcionamiento la base de datos, primero hay que

iniciar el servicio SQL Server Service Manager. Para lo que solamente hay que

cliquear sobre su icono situado en la esquina inferior derecha de la pantalla al

lado del reloj de sistema.

Una vez abierto, se selecciona SQL Server de la lista llamada “Services” y

se activa la casilla de “Auto-Start service when OS starts”. Entonces se debe

seleccionar el nombre del servidor del desplegable y pulsar sobre el botón de

“start” que iniciará el motor de la base de datos.

Al final, el servicio SQL Server Service Manager queda de la siguiente

manera:

Page 103: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

95

Figura 7.1. Puesta a punto del servicio SQL Server Service Manager.

Ahora, se selecciona SQL Server Agent, se realizan los mismos cambios y

ya estaría configurado.

7.2 Satcom Configuration.

La aplicación de configuración es una herramienta creada para configurar

correctamente el enlace con la base de datos y sus DLL.

Una vez que la aplicación de Instalación ha finalizado, aparecerá en el

escritorio del cliente esta aplicación.

El cliente debe pulsar sobre su icono e introducir el nombre del servidor de

la base de datos, tras lo que debe pulsar sobre el botón “test”. Tal y como

aparece e la siguiente figura.

Page 104: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

96

Figura 7.2. Puesta a punto de la aplicación de configuración Satcom Configuration.

Tras lo que aparecerá un mensaje de aprobación y se deberá pulsar sobre

el botón “Apply”.

7.3 Satcom Trakm8 FTP Client.

En el caso de que se haya instalado esta aplicación, se deberá configurarla

para todas las unidades disponibles.

Esta aplicación aparecerá cada vez que se inicie el sistema, ya que se ha

instalado con ese propósito. Una vez iniciada, se debe pulsar sobre el botón

“File” y luego sobre la opción “Unit Type”. Y en la ventana que aparece se

deben seleccionar todas las unidades que aparezcan y luego pulsar sobre el

botón “Save” para que todo quede configurado permanentemente.

Gráficamente la secuencia de acciones a realizar es la siguiente:

Page 105: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

97

Primero se seleccionan las unidades pulsando sobre el botón “Unit Type”.

Figura 7.3.a. Puesta a punto de la aplicación TrakM8 2 FTP Client,

Se seleccionan todas las unidades.

Figura 7.3.b. Ventana de selección de unidades.

Se salvan los cambios.

Figura 7.3.c. Ventana para salvar la configuración.

Y eso es todo.

Page 106: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

98

7.4 Satcom GPRS.

Si se ha instalado Satcom GPRS, esta aplicación aparecerá

automáticamente siempre que se inicie el sistema. La primera vez que esto

ocurra, se le preguntará al cliente por su nombre de usuario y contraseña, que

será proporcionada por Satcom.

Figura 7.4.a. Ventana de información de usuario.

Tras introducir estos datos, el cliente debe pulsar sobre el menú “File” y

después sobre “Save” para que se almacene. Después de esto se iniciará la

aplicación, y tal y como hicimos con la aplicación anterior debemos configurarla

para que atienda a todo los tipos de unidades que aparezcan.

Gráficamente se realizaría del siguiente modo:

Se selecciona la opción tipo de unidad,

Figura 7.4.b. Visión del menú contextual para seleccionar los tipos de unidades.

y se seleccionan todas, como en la siguiente figura.

Page 107: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

99

Figura 7.4.c. Ventana de selección de unidades.

Y finalmente se guardan los cambios.

Figura 7.4.d. Ventana para almacenar los cambios.

7.5 Satcom Wavecom Modem.

Por último, el cliente deberá actualizar esta aplicación para que considere

todos los vehículos. Para ello una vez que Satcom Wavecom Modem se inicie,

se debe pulsar sobre el menú ”File” y luego seleccionar la opción “UnitType”.

Figura 7.5.a. Visión del menú contextual que lleva a la selección de unidades.

Tras lo que se deberán seleccionar todas las unidades que aparezcan.

Page 108: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

100

Figura 7.5.b. Ventana de selección de unidades.

Y finalmente salvar los cambios.

Figura 7.5.c. Tras pulsar sobre “Apply” quedarán salvados los cambios.

Y esto es todo.

Page 109: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

101

8. Conclusiones.

El entorno de trabajo Discovery implementa un complejo sistema de

seguimiento y alarmas que le permite al usuario tener un estricto control y

conocimiento de su flota de vehículos a tiempo real. Se trata de un sistema

distribuido que engloba componentes como son la base de datos, los

componentes COM+, una aplicación Web desarrollada con ASP y demás

herramientas que nos permiten comunicarnos con la flota de vehículos bien por

GSM o por GPRS.

Todos estos aspectos se tuvieron que tener muy en cuenta a la hora de

desarrollar la Aplicación de Instalación, y son los responsables de su gran

complejidad. Dificultad a la que habría que añadir el que se realizó en Irlanda y

por tanto utilizando una lengua extranjera.

Antes que nada es importante recalcar que éste no es un proyecto teórico,

sino que se trata de un proyecto sugerido por la empresa para solventar un

importante problema que ésta estaba sufriendo, y como tal se está utilizando

actualmente. Por tanto antes de sacarlo al mercado tuvo que pasar un período

de testeo, período que superó satisfactoriamente.

De los aspectos que más me han interesado han sido los referentes a la

encriptación de la información, para lo que tuve que diseñar un completo

sistema de encriptado que fuera lo suficientemente complejo para evitar

cualquier lectura o apropio ajeno de la información. Además del sistema creado

para controlar la distribución del producto, que utilizando códigos de producto y

de desbloqueo, consigue además un estricto control de los clientes que se

hacen con Discovery y de las máquinas en las que lo instalaban. Estas tareas

me llevaron la mayor parte del tiempo de desarrollo de la aplicación, tiempo

más que fundamentado, ya que tal y como he ido nombrando a lo largo del

proyecto, uno de los aspectos más importantes de Satcom Technology es la

seguridad.

Page 110: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

102

Otra de las ventajas de este proyecto habría que enfocarla en el plano

personal, ya que comprende muchos de las materias estudiadas en la carrera,

desde el uso de modems GSM/GPRS para comunicarnos con los vehículos,

hasta el conocimiento de lenguajes de programación y de sistemas operativos.

Además de haber aprendido a programar profesionalmente en un lenguaje

como Visual Basic tan extendido hoy en día y el saber desenvolverse

trabajando en el seno de una empresa de telecomunicaciones.

Para concluir, la Aplicación de Instalación del Entorno de Trabajo Discovery

está siendo ya utilizada comercialmente, y por tanto su funcionamiento está

más que comprobado. Aun así, se trata de la primera versión que se realiza y

por tanto se puede mejorar en algunos aspectos. Como recomendación de

mejora yo incluiría que sea compatible no sólo con sistemas operativos

Windows, sino con otros como Unix, Linux,etc. Aunque para ello habría que

rediseñar primero Discovery para que pudiera funcionar en estas plataformas.

Page 111: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

APLICACIÓN DE INSTALACIÓN DEL ENTORNO DE TRABAJO DISCOVERY

103

9. Anexos.

Page 112: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

104

9.1 Código de la Aplicación de Instalación.

En este anexo se incluirá todo el código desarrollado en la Aplicación de

Instalación del Entorno de Trabajo Discovery, tanto el contenido de los

formularios como el de los diferentes módulos.

Este código esta debidamente comentado para que su lectura y su

seguimiento pueda ser entendida sin mucha dificultad. Para lo que los

comentarios se han introducido siguiendo la nomenclatura particular de Visual

Basic. Esto es, se considera un comentario todo aquello que vaya precedido

en su línea por el carácter “ ‘ “. Aun así, para que no haya posibilidad de

confusión, los comentarios aparecerán con letra cursiva.

En total, la aplicación está distribuida en 18 formularios y 7 módulos, cada

uno de los cuales serán explicados a nivel de código en este anexo.

9.1.1 Formularios.

9.1.1.1 frmSetUp.

‘ Este procedimiento Sub gestiona que se habilite el botón “Install”

Private Sub CmbMainSelection_click()

If CmbMainSelection.Text = "Server Installation" Or

CmbMainSelection.Text = "Client Installation" Then

cmdInstall.Enabled = True

Else

cmdInstall.Enabled = False

End If

End Sub

‘ Este procedimiento Sub controla que se seleccione una de las dos

‘ posibilidades, sino muestra un mensaje de error. Cuando es correcta

Page 113: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

105

‘ la elección, se cierra el actual formulario, se guarda la opción

‘ elegida en la variable global strWhoCall, y se carga el siguiente

‘ formulario (frmLicense).

Private Sub cmdInstall_Click()

If CmbMainSelection.Text = "" Or CmbMainSelection.Text = "Choose

an installation mode" Then

MsgBox "Please select an item before", vbExclamation, "Error"

ElseIf CmbMainSelection.Text = "Server Installation" Then

Unload frmSetUp

strWhoCall = "Server"

Load frmLicense

frmLicense.Show

ElseIf CmbMainSelection.Text = "Client Installation" Then

Unload frmSetUp

strWhoCall = "Client"

Load frmLicense

frmLicense.Show

End If

End Sub

‘ El siguiente procedimiento Sub cierra la aplicación cuando el

‘ cliente pulsa sobre el botón “Quit”. Para ello simplemente descarga

‘ el actual formulario, ya que éste es el único que está actualmente

‘ cargado.

Private Sub CmdQuit_Click()

Unload frmSetUp

End Sub

‘ Este procedimiento Sub se ejecuta al cargarse el formulario, es

‘ decir al principio de la aplicación. Hace uso de la función

‘ GetWindowsDirectory para obtener la ruta del directorio de Windows,

‘ y posteriormente el disco donde éste está localizado. Ésta función

‘ está ubicada en el módulo principal de la aplicación y por tanto se

‘ explicará más adelante cuando se analice dicho módulo.

‘ La ruta del directorio de Windows se guardará en la variable global

‘ strWindowsFolder, y la unidad correspondiente en strMasterDrive.

‘ También almacena en la variable global strINSTALLPATH la ruta desde

‘ donde se está ejecutando la aplicación.

Private Sub Form_Load()

strWindowsFolder = GetWindowsDirectory()

Page 114: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

106

strMasterDrive = Left(strWindowsFolder, 2)

‘ La siguiente línea guarda en strINSTALLPATH la ruta donde se

‘ estará ejecutando la aplicación, es decir donde esté situado el

‘ ejecutable de la aplicación (por lo general en el CD de

‘ instalación y por tanto la ruta = D:).

strINSTALLPATH = app.path

End Sub

9.1.1.2 frmLicense.

‘ Los siguiente dos procedimientos Sub habilitan el botón “NEXT” sólo

‘ cuando la casilla de aceptar la licencia (“I agree”) está activada.

Private Sub Check_agree_Click()

If Check_agree.Value = 1 Then Cmd_NextButton.Enabled = True

If Check_agree.Value = 0 Then Cmd_NextButton.Enabled = False

End Sub

Private Sub Check_Disagree_Click()

If Check_Disagree.Value = 1 Then Cmd_NextButton.Enabled = True

If Check_Disagree.Value = 0 Then Cmd_NextButton.Enabled = False

End Sub

‘ Este procedimiento Sub gestiona la funcionalidad del botón “Back”,

‘ que dirigiría al usuario de nuevo al formulario anterior (frmSetUp).

‘ Para ello descarga el formulario actual, carga el frmSetUp y lo hace

‘ aparecer en pantalla.

Private Sub Cmd_BackButton_Click()

Unload frmLicense

Load frmSetUp

frmSetUp.Show

End Sub

‘ El siguiente código desarrolla todo la actividad antes mencionada,

‘ primero crea una instancia a un objeto tipo FileSystemObject, que

‘ permite realizar operaciones típicas de manejo de ficheros y

‘ directorios. Hace un segundo chequeo de que el cliente ha accedido a

‘ la instalación e instala el fichero OCX haciendo uso de un

Page 115: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

107

‘ procedimiento Sub (InstallSetUPOCX) definido en el módulo principal

‘ de la aplicación y que por tanto será explicado posteriormente.

Private Sub Cmd_NextButton_Click()

Dim lngAux As Long

Dim objF As FileSystemObject

Set objF = New FileSystemObject

Dim ret

If Check_Disagree.Value = 0 Then

‘ Llama al procedimiento Sub para instalar y registrar el fichero

‘ OCX

InstallSetUPOCX

‘ Ahora crea el directorio “Satcom Discovery” en el directorio

‘ “Archivos de Programas”, siempre y cuando no esté creado ya.

If Not (objF.FolderExists(strMasterDrive & "\Program

Files\Satcom Discovery")) Then

objF.CreateFolder strMasterDrive & "\Program Files\Satcom

Discovery"

End If

‘ Ahora crea la clave en el registro de Windows donde se guardará

‘ cierta información relevante para el desarrollo de la

‘ aplicación. Para ello utiliza la API RegCreateKey que se

‘ declarará posteriormente en el módulo.

lngAux = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Satcom", ret)

RegCloseKey (ret)

‘ Finalmente descarga el actual formulario y pasa al siguiente

‘(frmProductKey)

Unload frmLicense

Load frmProductKey

frmProductKey.Show

‘ Por último si el cliente no está de acuerdo con la licencia, la

‘ aplicación termina aquí.

ElseIf Check_Disagree.Value = 1 Then

Unload frmLicense

End If

End Sub

Page 116: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

108

‘ Este último procedimiento Sub termina la aplicación si el cliente

‘ pulsa sobre el botón “Quit SetUP Wizard”

Private Sub Cmd_quitButton_Click()

Unload frmLicense

End Sub

9.1.1.3 frmProductKey.

‘ Incluimos esta cláusula al comienzo del código para especificar

‘ que imponemos una declaración explícita de las variables. Esto

‘ quiere decir que para evitar problemas al equivocarse con el

‘ nombre de las variables y que Visual Basic las identifique como

‘ variables nuevas y las declare automáticamente, con esta cláusula

‘ cada vez que Visual Basic detecte un nombre de variable sin

‘ declarar nos mostrará un mensaje de error.

Option Explicit

‘ Este procedimiento Sub nos permite copiar en el portapapeles el

‘ código del producto.

Private Sub cmdCopy_Click()

Clipboard.Clear

Clipboard.SetText (lblProductPreKey.Caption)

End Sub

‘ El siguiente procedimiento Sub engloba casi toda la funcionalidad de

‘ este formulario. Se trata del código que se ejecuta una vez que el

‘ cliente pulsa sobre el botón “Next”.

Private Sub cmdNextButton_Click()

‘ Primero, compara el código de desbloqueo introducido por el

‘ usuario con el correcto, el cual lo crea la función GetProductKey

‘ que está definida en el módulo SerialNumber y por tanto será

‘ descrita posteriormente. Cuando el código es incorrecto aparece

‘ un mensaje de error y se permite al usuario volver a intentarlo

‘ tres veces más, tras las cuales se le comunica que contacte con

‘ Satcom para un código válido y se cierra la aplicación.

If txtProductKey.Text <> GetProductKey(lblProductPreKey.Caption,

strSatcomKey) Then

Page 117: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

109

MsgBox "Incorrect Unlock Key ", vbExclamation, "Error"

intCounter = intCounter + 1

If intCounter = 4 Then

MsgBox "Please contact Satcom for a valid Unlock Key",

vbCritical, "Error"

Unload Me

End If

‘ Una vez que el código de desbloqueo es el correcto proseguimos

‘ con la aplicación. Almacenamos el valor del código de producto y

‘ el del código de desbloqueo en dos variables globales llamadas

‘ strProductserialNumber y strUnlockKey respectivamente.

Else

strProductSerialNumber = Me.lblProductPreKey.Caption

strUnlockKey = Me.txtProductKey.Text

‘ A continuación se crea un valor en el registro de Windows donde

‘ se almacenará el código de desbloqueo, de manera que si el

‘ usuario quiere volver a instalar Discovery o simplemente quiere

‘ pasar a la instalación en modo Cliente, el código de desbloqueo

‘ le aparecerá automáticamente. Para ello utiliza el

‘ procedimiento Sub SetRegistryStringValue definido en el módulo

‘ EditRegistry que se explicará más adelante.

SetRegistryStringValue "Unlock Key", strUnlockKey

‘ Ahora en función de el modo de instalación que seleccionó el

‘ cliente, se continiará con un formulario u otro.

If strWhoCall = "Server" Then

Unload Me

Load frmSelection

frmSelection.Show

ElseIf strWhoCall = "Client" Then

Unload Me

Load frmClientInstallation

frmClientInstallation.Show

End If

End If

End Sub

Page 118: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

110

‘ El procedimiento que sigue se ejecuta al cargar el formulario y por

‘ tanto antes de que éste se muestre en pantalla. Efectúa un chequeo

‘ previo de que el código del producto se ha creado correctamente (en

‘ caso contrario sería igual a 0) y lo copia en el espacio reservado

‘ para tal información en el formulario. Después busca en el registro

‘ si ya se ha escrito el código de desbloqueo previamente, y en caso

‘ afirmativo lo copia en el text box adecuado del formulario. Para

‘ ello utiliza funciones como GetPreKey (definida en el módulo

‘ SerialNumber) y RegCheckValueExists y RegReadstringvalue (definidas

‘ en el módulo EditRegistry) y que por tanto serán analizadas

‘ posteriormente.

Private Sub Form_Load()

Dim strTestPrekey As String

strTestPrekey = GetPreKey(strMasterDrive & "\")

If strTestPrekey = "0" Then

MsgBox "Prekey Error , please contact Satcom", vbCritical,

"Error"

Unload Me

End If

lblProductPreKey.Caption = strTestPrekey

If RegCheckValueExists("Unlock Key") Then txtProductKey.Text =

RegReadStringValue("Unlock Key")

End Sub

9.1.1.4 frmSelection (Instalación modo Servidor).

‘ Especificamos declaración explícita de las variables.

Option Explicit

‘ Este procedimiento Sub se ejecuta cuando pulsamos sobre el botón

‘ “Communications”, primero deshabilita el formulario mientras instala

‘ los archivos DLL y OCX necesarios usando el procedimiento InstallDLL

‘ que se describirá más adelante cuando se vea el módulo principal. Y

‘ finalmente carga el formulario frmExeFiles donde los archivos de

‘ comunicación serán instalados.

Private Sub cmdCommunications_Click()

Me.Enabled = False

Page 119: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

111

InstallDLL

Me.Enabled = True

‘ Como ya se han instalado los DLL y OCX, cambiamos boAnyInstalled

‘ a true.

boAnyInstalled = True

Unload Me

Load frmExeFiles

frmExeFiles.Show

End Sub

‘ El siguiente procedimiento Sub gestiona el botón “Finish”,

‘ encaminando la aplicación hacia un formulario final u otro en

‘ función de si se ha instalado algo o no, información que es dada por

‘ la variable boAnyInstalled.

Private Sub cmdFinishButton_Click()

If boAnyInstalled = True Then

Unload Me

Load frmFinish

frmFinish.Show

Else

Unload Me

Load frmFinishWithoutInstall

frmFinishWithoutInstall.Show

End If

End Sub

‘ Este procedimiento Sub simplemente carga el formulario frmIdentity,

‘ donde se instalará y configurará la aplicación COM+.

Private Sub CmdInstallComPlus_Click()

Unload Me

Load frmIdentity

frmIdentity.Show

End Sub

‘ Este procedimiento Sub simplemente carga el formulario

‘ frmDatabaseSelection, donde se procederá a la instalación de la base

‘ de datos.

Private Sub cmdInstallDatabase_Click()

Unload Me

Load frmDatabaseSelection

Page 120: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

112

frmDatabaseSelection.Show

End Sub

‘ Con el siguiente código se instala el directorio virtual y se

‘ configura la herramienta de Servicios de Internet Information Server.

Private Sub cmdInstallIIS_Click()

‘ Deshabilita el formulario, cambia el puntero del ratón, cambia el

‘ tamaño del formulario para que aparezca la barra de progreso, y

‘ configura los límites de esta barra de progreso.

Me.Enabled = False

Me.MousePointer = 11

Me.Height = 8100

ProgressBar.Min = 0

ProgressBar.Max = 5

ProgressBar.Value = 0

‘ Crea una instancia a un objeto tipo FileSystemObject para tratar

‘ con las funciones típicas del manejo de ficheros y directorios.

Dim objF As FileSystemObject

Set objF = New FileSystemObject

‘ Chequea si ya había un directorio llamado Satcom en el directorio

‘ principal de IIS, y si así es lo borra.

If objF.FolderExists(strMasterDrive & "\inetpub\wwwroot\Satcom")

Then

objF.DeleteFolder strMasterDrive & "\inetpub\wwwroot\Satcom",

True

End If

ProgressBar.Value = ProgressBar.Value + 1

‘ Copia la aplicación ASP contenida en el directorio Satcom en el

‘ directorio principal de IIS.

objF.CopyFolder strINSTALLPATH & "\IISFOLDER\Satcom",

strMasterDrive & "\inetpub\wwwroot\Satcom", True

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora, haciendo uso del módulo de clase IISVirtualDirectory, se

‘ crea y configura el directorio virtual en la herramienta

Page 121: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

113

‘ Servicios de Internet Information Server. Este módulo de clase

‘ será explicado posteriormente.

Dim oIIS As IISVirtualDirectory

Set oIIS = New IISVirtualDirectory

With oIIS

‘ Ubica físicamente el directorio virtual.

.PhysicalDirectoryName = strMasterDrive &

“\inetpub\wwwroot\Satcom"

‘ Ahora pone el nombre del directorio virtual (SATCOM)

.VirtualDirectoryName = "SATCOM"

‘ Ahora crea el directorio virtual, en caso de error mostraría un

‘ mensaje de error e iría hacia la salida de error declarada al

‘ final del procedimiento.

If .Create() Then

' MsgBox "Created"

Else

MsgBox .LastError

GoTo errorexit

End If

End With

ProgressBar.Value = ProgressBar.Value + 1

‘ Libera la instancia.

Set oIIS = Nothing

‘ Almacena en la clave de Satcom en el registro de Windows un valor

‘ llamado “IIS” que valdrá 1 cuando el directorio virtual esté

‘ instalado. Además activa la variable boAnyInstalled, habilita de

‘ nuevo el formulario y normaliza su tamaño y el puntero del ratón.

SetRegistryValue "IIS", 1

boAnyInstalled = True

Me.Enabled = True

ProgressBar.Value = 5

Me.Height = 7320

Me.MousePointer = 0

Unload Me

Load frmSelection

Page 122: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

114

frmSelection.Show

Exit Sub

‘ En caso de que haya habido un error a la hora de crear el directorio

‘ vitual, se mostraría un mensaje de error que ya se escribió antes y

‘ se dejaría al usuario en el mismo formulario por si quiere intentar

‘ instalar otro componente de la aplicación.

errorexit:

If Err.Number <> 0 Then

Me.Enabled = True

Me.Height = 7320

Me.MousePointer = 0

Exit Sub

End If

End Sub

‘ Este es el procedimiento que se ejecuta al cargar este formulario.

‘ En él se lee el registro de Windows en la clave de Satcom a la

‘ búsqueda de entradas que nos indiquen que componentes hay ya

‘ instalados. Para ello hace uso de la función ReadRegistryValue que

‘ se explicará posteriormente en el módulo EditRegistry.

Private Sub Form_Load()

If ReadRegistryValue("IIS") = 1 Then boIISFOLDERINSTALLED = True

If ReadRegistryValue("Database") = 1 Then boDATABASEINSTALLED =

True

If ReadRegistryValue("COM+") = 1 Then boCOMPLUSINSTALLED = True

Me.Label_IISInstalled.Visible = boIISFOLDERINSTALLED

Me.Label_DatabaseInstalled.Visible = boDATABASEINSTALLED

Me.Label_ComInstalled.Visible = boCOMPLUSINSTALLED

End Sub

9.1.1.5 frmIdentity (Instalación modo Servidor).

‘ Este procedimiento Sub gestiona el botón “Back” y simplemente vuelve

‘ hacia el formulario de selección(frmSelection).

Private Sub cmdBackButton_Click()

Unload frmIdentity

Page 123: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

115

Load frmSelection

frmSelection.Show

End Sub

‘ Con el siguiente código desarrollamos las acciones deseadas al

‘ pulsar sobre el botón “Next”. Osea, instalamos la aplicación COM+

‘ bajo el usuario especificado por el cliente.

Private Sub cmdInstallButton_Click()

‘ Especificamos que si ocurre un error pase a la siguiente línea.

On Error Resume Next

‘ Deshabilitamos el formulario durante la instalación, cambiamos el

‘ puntero del ratón al típico reloj de arena y configuramos la

‘ barra de progreso.

Me.Enabled = False

Me.MousePointer = 11

ProgressBar.Min = 0

ProgressBar.Max = 5

ProgressBar.Value = 0

‘ Se declara una instancia a un objeto FileSystemmObject para

‘ tratar con las funciones típicas para el manejo de archivos y

‘ directorios. Tras lo que se verifica si el password y la

‘ confirmación de password coinciden. En el caso de que el cliente

‘ haya elegido la opción de ejecutar la aplicación bajo el usuario

‘ de la actual sesión, tanto el password como su confirmación

‘ estarían en blanco y por tanto coincidirían. Una vez chequeado

‘ que no hay error se prosigue con la instalación.

Dim objAux As FileSystemObject

Set objAux = New FileSystemObject

‘ Se crea el nombre completo del dominio.

Dim strDomainPath As String

strDomainPath = Me.Domain_text.Text & "\" & Me.User_text.Text

If Password_text.Text <> Confirm_text.Text Then

MsgBox "Password and confirm do not match."

Me.Enabled = True

Me.MousePointer = 0

Else

Page 124: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

116

‘ Aumentemos el tamaño del formulario para que se aprecie la

‘ barra de progreso.

Me.Height = 8100

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora se procede a instalar y registrar el archivo DLL donde

‘ están contenidos los componentes COM+ que queremos instalar, en

‘ nuestro caso el archivo SatData.dll. Para ello se hace uso del

‘ procedimiento InstallOneDll que se explicará cuando se analice

‘ el módulo principal.

InstallOneDll strINSTALLPATH & "\DLL's & OCX's\Server

DLL's\SatData.dll"

‘ Ahora continuamos instalando la aplicación COM+, primero vemos

‘ si ya existe, en cuyo caso la borramos para crear una nueva.

‘ Para ello se utiliza la función ApplicationExist que nos

‘ devuelve TRUE si ya existe y que se explicará más adelante con

‘ el módulo principal.

Dim catalog As COMAdmin.COMAdminCatalog

Set catalog = New COMAdmin.COMAdminCatalog

If (ApplicationExists("satcom") = True) Then

DeleteApplication ("satcom")

End If

‘ Ahora empezamos analizando el caso en que el cliente ha elegido

‘ la segunda opción, es decir la de identificar a otro usuario.

If Option2.Value = True Then

If Me.Domain_text.Text = "" Then strDomainPath =

Me.User_text.Text

‘ Instala la aplicación utilizando el password dado y el

‘ nombre/dominio. Para ello instala el fichero satcom.msi

‘ creado para tal fin.

catalog.InstallApplication strINSTALLPATH &

"\com\satcom.msi", , , strDomainPath, Password_text.Text

‘ En caso de error muestra un mensaje en pantalla y reinicia el

‘ formulario, para que el cliente pueda intentarlo de nuevo.

Page 125: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

117

If Err <> 0 Then

MsgBox "User or/and Password incorrect", vbCritical, "ERROR"

Me.Height = 7320

Unload Me

Load frmIdentity

frmIdentity.Show

‘ Si no ha habido error se continua con la instalación de los

‘ componentes.

Else

ProgressBar.Value = ProgressBar.Value + 1

Me.MousePointer = 11

Call catalog.InstallComponent("satcom", strWindowsFolder &

"\Satdata.dll", "", "")

‘ Se chequea que no haya habido errores, en tal caso se

‘ muestra un mensaje en pantalla y se vuelve a iniciar el

‘ formulario.

If Err <> 0 Then

MsgBox "Install Component Error", vbCritical, "ERROR"

Me.Height = 7320

Unload Me

Load frmIdentity

frmIdentity.Show

End If

‘ Ahora se instala el archivo VBRun60sp4.exe en modo

‘ silencioso, para lo que se usa la función ShellandWait

‘ descrita en el módulo principal y que por tanto veremos

‘ posteriormente. Básicamente lo que hace esta función es

‘ ejecutar el archivo dado y no continuar con el código de

‘ nuestra aplicación hasta que haya la ejecución haya acabado.

ShellandWait (strINSTALLPATH & "\EXEFILES\VBRun60sp4.exe /Q")

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora instala del mismo modo el fichero MDAC_TYP27.exe,

‘ pero como este fichero no permite una instalación

‘ silenciosa, se le informa al usuario de su instalación.

MsgBox "Now it will install the Microsoft Data Access

Components 2.7 , please follow the instructions and do not

Page 126: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

118

restart your system at the end", vbInformation, "Microsoft

Data Components 2.7"

ShellandWait (strINSTALLPATH & "\EXEFILES\MDAC_TYP27.exe /Q")

ProgressBar.Value = ProgressBar.Value + 1

‘ Como es muy probable que el cliente disponga de una red de

‘ ordenadores y haya optado por una instalación distribuida,

‘ deberá instalar el fichero de configuración también en la

‘ máquina donde instale la aplicación COM+. Por eso

‘ utilizamos el siguiente código para copiar dicho fichero en

‘ la carpeta Satcom Discovery y crearle un acceso directo en

‘ el directorio escritorio, para que así sea fácilmente

‘ accesible.

If objAux.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe") Then objAux.DeleteFile

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe", True

objAux.CopyFile strINSTALLPATH &

"\EXEFILES\SatcomConfiguration.exe", strMasterDrive &

"\Program Files\Satcom Discovery\SatcomConfiguration.exe",

True

‘ Para crear el acceso directo se utiliza la función

‘ CreateShortCut definida en el módulo principal y que por

‘ tanto será descrita posteriormente.

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\escritorio\SatcomConfiguration.lnk", strMasterDrive &

"\Program Files\Satcom Discovery\SatcomConfiguration.exe",

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe"

‘ Ahora se almacena un valor tipo string en el registro de

‘ Windows con los datos de usuario y dominio seleccionados

‘ para así rellenar estos campos automáticamente en futuras

‘ reinstalaciones.

SetRegistryStringValue "COM+ User", User_text.Text

If Domain_text.Text <> "" Then SetRegistryStringValue "COM+

Domain", Domain_text.Text

Page 127: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

119

End If

‘ Ahora programamos el caso en el que el cliente elige instalar

‘ la aplicación COM+ bajo el usuario que haya iniciado la sesión.

ElseIf Option1.Value = True Then

‘ Se instala la aplicación usando el fichero satcom.MSI

catalog.InstallApplication strINSTALLPATH & "\com\satcom.MSI"

‘ Se chequea si ha habido algún error, sino se continua

If Err <> 0 Then

MsgBox "Install Application Error", vbCritical, "ERROR"

Me.Height = 7320

Unload Me

Load frmIdentity

frmIdentity.Show

Else

ProgressBar.Value = ProgressBar.Value + 1

Me.MousePointer = 11

‘ Se instalan los componentes contenidos en el fichero

‘ Satdata.dll y de nuevo se chequea si ha habido error.

Call catalog.InstallComponent("satcom", strWindowsFolder &

"\Satdata.dll", "", "")

If Err <> 0 Then

MsgBox "Install Component Error", vbCritical, "ERROR"

Me.Height = 7320

Unload Me

Load frmIdentity

frmIdentity.Show

End If

‘ Ahora se instala el archivo VBRun60sp4.exe en modo

‘ silencioso, para lo que se usa la función ShellandWait

‘ descrita en el módulo principal y que por tanto veremos

‘ posteriormente. Básicamente lo que hace esta función es

‘ ejecutar el archivo dado y no continuar con el código de

‘ nuestra aplicación hasta que haya la ejecución haya

‘ acabado.

ShellandWait (strINSTALLPATH & "\EXEFILES\VBRun60sp4.exe

/Q")

Page 128: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

120

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora instala del mismo modo el fichero MDAC_TYP27.exe,

‘ pero como este fichero no permite una instalación

‘ silenciosa, se le informa al usuario de su instalación.

MsgBox "Now it will install the Microsoft Data Access

Components 2.7 , please follow the instructions and do not

restart your system at the end", vbInformation, "Microsoft

Data Components 2.7"

ShellandWait (strINSTALLPATH & "\EXEFILES\MDAC_TYP27.exe

/Q")

ProgressBar.Value = ProgressBar.Value + 1

‘ Se copia el fichero de configuración

‘ SatcomConfiguration.exe en la carpeta Satcom Discovery y

‘ se crea un acceso directo en el escritorio.

If objAux.FileExists(strMasterDrive & "\Program

Files\Satcom Discovery\SatcomConfiguration.exe") Then

objAux.DeleteFile strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe", True

objAux.CopyFile strINSTALLPATH &

"\EXEFILES\SatcomConfiguration.exe", strMasterDrive &

"\Program Files\Satcom Discovery\SatcomConfiguration.exe",

True

CreateShortCut strMasterDrive & "\Documents and

Settings\All Users\escritorio\SatcomConfiguration.lnk",

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe", strMasterDrive &

"\Program Files\Satcom Discovery\SatcomConfiguration.exe"

End If

End If

‘ Ahora se finaliza el procedimiento Sub, liberando la

‘ instancia catalog, chequeando que no ha habido errores,

‘ volviendo el formulario a su tamaño natural, guardando en el

Page 129: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

121

‘ registro de Windows el valor “COM+” y dándole un valor = 1

‘ para indicar que ya se ha instalado, activando la variable

‘ boAnyInstalled a verdadero, y volviendo al formulario

‘ anterior (frmselection), donde ahora aparecerá ya la etiqueta

‘ al lado del botón de COM+ Application diciendo que se ha

‘ instalado.

Set catalog = Nothing

ProgressBar.Value = 5

If Err <> 0 Then

Me.Height = 7320

Unload Me

Load frmIdentity

frmIdentity.Show

Else

Me.Enabled = True

Me.Height = 7320

Unload Me

SetRegistryValue "COM+", 1

boAnyInstalled = True

Load frmSelection

frmSelection.Show

End If

End If

Exit Sub

End Sub

‘ El siguiente es el procedimiento Sub que se ejecuta al cargar el

‘ formulario, lo que hace es mirar en el registro de Windows por si ya

‘ hubiera una instalación anterior del tipo “especificar un usuario”,

‘ en tal caso selecciona dicha opción por defecto y rellena los text

‘ boxes adecuados con la información almacenada en el registro. Para

‘ eso utiliza las funciones RegCheckValueExists y RegReadStringValue

‘ ambas definidas en el módulo EditRegistry y que por tanto se

‘ explicarán más adelante.

Private Sub Form_Load()

If RegCheckValueExists("COM+ User") Then

Option2.Value = True

Page 130: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

122

User_text.Text = RegReadStringValue("COM+ User")

If RegCheckValueExists("COM+ Domain") Then Domain_text.Text =

RegReadStringValue("COM+ Domain")

Else

‘ En caso contrario selecciona la opción primera por defecto.

Option1.Value = True

End If

End Sub

‘ Los siguientes dos procedimientos Sub gestionan que se deshabiliten

‘ los text boxes de la segunda opción cuando se escoja la primera, y

‘ se habiliten cuando se escoja la segunda.

Private Sub Option1_Click()

If Option2.Value = False Then

Label_User.Enabled = False

Label_Password.Enabled = False

Label_Confirm.Enabled = False

Label_Domain.Enabled = False

User_text.Enabled = False

Password_text.Enabled = False

Confirm_text.Enabled = False

Domain_text.Enabled = False

End If

End Sub

Private Sub Option2_Click()

If Option2.Value = True Then

Label_User.Enabled = True

Label_Password.Enabled = True

Label_Confirm.Enabled = True

Label_Domain.Enabled = True

User_text.Enabled = True

Password_text.Enabled = True

Confirm_text.Enabled = True

Domain_text.Enabled = True

ElseIf Option2.Value = False Then

Label_User.Enabled = False

Label_Password.Enabled = False

Page 131: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

123

Label_Confirm.Enabled = False

Label_Domain.Enabled = False

User_text.Enabled = False

Password_text.Enabled = False

Confirm_text.Enabled = False

Domain_text.Enabled = False

End If

End Sub

9.1.1.6 frmDatabaseSelection (Instalación modo Servidor).

‘ Se especifica declaraciones explicitas.

Option Explicit

‘ El siguiente código gestiona el funcionamiento del botón para

‘ instalar MSDE 2000. Para ello mira si existe la clave determinada en

‘ el registro de Windows, devolviendo un mensaje de error cuando el

‘ software ya está instalado. Sino, deshabilita el formulario para que

‘ así no se pueda pulsar otro botón durante la instalación y se

‘ procede a ella. Una vez acabada la instalación es necesario que se

‘ reinicie el ordenador antes de poder instalar la base de datos, por

‘ lo que se pasará a un formulario de fin donde se indique que se debe

‘ reiniciar.

Private Sub cmdMSDEInstall_Click()

Dim strKey As String

strKey = "SOFTWARE\Microsoft\Microsoft SQL Server"

‘ Ahora utiliza la función RegKeyExits para ver si existe esa clave

‘ en el registro. Dicha función se explicará cuando se estudie el

‘ módulo EditRegistry.

If RegKeyExists("LocalMachine", strKey) Then

MsgBox "MSDE2000 is already installed on your computer, please

proceed to install the Database", vbExclamation, "Software

installed"

Else

Page 132: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

124

Me.Enabled = False

Me.MousePointer = 11

‘ Ahora se instala MSDE 2000 usando la función ShellandWait que

‘ se describirá posteriormente.

ShellandWait (strINSTALLPATH & "\MSDE\setup.exe /wait")

Me.Enabled = True

Me.MousePointer = 0

‘ Se añade el efecto de tachar con una cruz el botón “Install

‘ MSDE 2000” una vez que éste se ha instalado.

Me.cmdMSDEInstall.FontStrikethru = True

Me.cmdMSDEInstall.Enabled = False

‘ Se cambia la variable global booleana boAnyInstalled a True, ya

‘ que se ha instalado algo y se necesitará reiniciar el equipo.

boAnyInstalled = True

Unload Me

‘ Se pasa al formulario de fin que nos aconseja y permite

‘ reiniciar el equipo.

Load frmMSDE2000Finish

frmMSDE2000Finish.Show

End If

End Sub

‘ El siguiente procedimiento Sub se ejecuta cuando el cliente pulsa

‘ sobre el botón “Install Database in SQL Server 2000” y dirige el

‘ flujo de la aplicación hacia el formulario donde se instalará la

‘ base de datos, especificando mediante la variable global

‘ strDatabaseFlag que se desea instalarla utilizando SQL Server 2000.

Private Sub cmdSQL_Click()

strDatabaseFlag = "SQL"

Unload Me

Load frmSetUpInServer

frmSetUpInServer.Show

End Sub

Page 133: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

125

‘ El siguiente procedimiento Sub se ejecuta cuando el cliente pulsa

‘ sobre el botón “Install Database in MSDE 2000” y dirige el flujo de

‘ la aplicación hacia el formulario donde se instalará la base de

‘ datos, especificando mediante la variable global strDatabaseFlag que

‘ se desea instalarla utilizando MSDE 2000.

Private Sub cmdMSDE_Click()

strDatabaseFlag = "MSDE"

Unload Me

Load frmSetUpInServer

frmSetUpInServer.Show

End Sub

‘ Por último, con el siguiente código se gestiona la utilidad del

‘ botón “Back” que devuelve la aplicación al formulario frmSelection.

Private Sub cmdBack_Click()

Unload Me

Load frmSelection

frmSelection.Show

End Sub

9.1.1.7 frmMSDE2000Finish (Instalación modo Servidor).

‘ Se especifica declaración explícita.

Option Explicit

‘ El siguiente código gestiona el botón “Finish without restarting”,

‘ que saldrá de la aplicación de instalación. Esto lo realiza

‘ descargándose el formulario, ya que al ser el único formulario

‘ activo se terminará la aplicación.

Private Sub Command1_Click()

Unload Me

End Sub

‘ El siguiente código gestiona el funcionamiento del botón “Restart”,

‘ para ello llama al procedimiento Sub “RebootNT” definido en el

‘ módulo Reboot y que nos permitirá reiniciar el equipo del cliente

‘ desde la aplicación de instalación.

Private Sub cmdRestart_Click()

Page 134: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

126

RebootNT True

Unload Me

End Sub

9.1.1.8 frmSetUpInServer (Instalación modo Servidor).

‘ El siguiente código se ejecuta al cagarse el formulario y por tanto

‘ chequea el registro de Windows por si ya ha habido una instalación

‘ previa y por tanto por si hay información que se deba auto-rellenar

‘ en el formulario. Para ello utiliza las funciones

‘ RegCheckValueExists y RegReadStringValue, ambas definidas en el

‘ módulo EditRegistry que se analizará posteriormente cuando se

‘ expongan los módulos.

Private Sub Form_Load()

If RegCheckValueExists("Database PathName") Then txtPathName.Text =

RegReadStringValue("Database PathName")

If RegCheckValueExists("LogFiles PathName") Then

txtPathNameLog.Text = RegReadStringValue("LogFiles PathName")

If RegCheckValueExists("Instance Name") Then txtInstance.Text =

RegReadStringValue("Instance Name")

If txtPathName.Text <> "" And txtPathNameLog <> "" Then

CmdInstall.Enabled = True

End Sub

‘ Los siguientes dos procedimientos Sub, dirigen la aplicación hacia

‘ el formulario Browser que le permitirá al cliente especificar la

‘ ruta del directorio donde quiere guardar el fichero de la base de

‘ datos y el fichero LOG. Este formulario es el mismo para ambos

‘ botones y cuando termina rellena automáticamente el text box

‘ correspondiente, por lo que para que conozca quien lo está

‘ solicitando se utiliza la variable global strOrigen.

Private Sub cmdBrowseButton_Click()

Load frmBrowser

strOrigin = "PathName"

frmBrowser.Show

Page 135: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

127

End Sub

Private Sub CmdBrowseLogButton_Click()

Load frmBrowser

strOrigin = "PathNameLog"

frmBrowser.Show

End Sub

‘ A continuación vienen los dos procedimientos Sub que se encargan de

‘ que el botón “Next” se habilite sólo cuando ambas rutas, la del

‘ fichero de la base de datos y la del fichero LOG, están

‘ seleccionadas. Estos procedimientos se ejecutan cuando los text

‘ boxes dejan de estar enfocados. También, cuando uno de los text

‘ boxes está vacío y se selecciona una ruta para el otro, el primero

‘ se actualiza a esa misma ruta. Esto se hace porque suelen compartir

‘ la misma ruta, pero el cliente siempre tiene la posibilidad de

‘ cambiarla y seleccionar directorios diferentes.

Private Sub txtPathName_lostfocus()

If txtPathNameLog.Text = "" Then txtPathNameLog.Text =

txtPathName.Text

If txtPathName.Text <> "" And txtPathNameLog.Text <> "" Then

Me.CmdInstall.Enabled = True

Else

Me.CmdInstall.Enabled = False

End If

End Sub

Private Sub txtPathNameLog_lostfocus()

If txtPathName.Text = "" Then txtPathName.Text =

txtPathNameLog.Text

If txtPathName.Text <> "" And txtPathNameLog.Text <> "" Then

Me.CmdInstall.Enabled = True

Else

Me.CmdInstall.Enabled = False

End If

End Sub

Page 136: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

128

‘ Ahora se procede a la instalación de la base de datos siguiendo los

‘ pasos antes descritos. Este código se ejecuta cuando el cliente

‘ pulsa sobre el botón “Next”.

Private Sub cmdInstall_Click()

‘ Primero se declaran las variables que se van a emplear para

‘ llevar a cabo la instalación.

Dim pathTempFile As String

Dim path As String, strcopy As String, FreeHeaderFileNum As Integer

Dim freeNum As Integer, strPathLog As String, strSourcePath As

String

Dim PathDestination As String

Dim objD As Scripting.FileSystemObject, File As Variant, objF As

Variant

Dim strFileName As String, objAux As FileSystemObject

Dim strSQLTool As String

‘ Se guardan en su correspondientes variables las rutas del fichero

‘ para la base de datos y para el fichero LOG. Además se hace un

‘ último chequeo de que el cliente ha completado los text boxes. Si

‘ no ha habido error se procede con la instalación, para lo que se

‘ aumenta el tamaño del formulario para dejar ver la barra de

‘ progreso y se deshabilita el formulario para evitar que se

‘ pulsen los botones durante la instalación.

path = txtPathName.Text

strPathLog = txtPathNameLog.Text

If path = "" Or strPathLog = "" Then

MsgBox "Fill the text box first,please", vbExclamation, "Error"

Else

Me.Enabled = False

Me.Height = 8100

Me.MousePointer = 11

ProgressBar.Min = 0

ProgressBar.Max = 7

ProgressBar.Value = 0

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora, se desencripta el fichero Encryp.enc situado en el CD de

Page 137: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

129

‘ instalación y se guarda en “Program Files\Satcom Discovery”

‘ como fichero filler.sql. Para lo que se utiliza el

‘ procedimiento Unencryp_File para desencriptar de un fichero a

‘ otro y que se explicará cuando se vea el módulo EncrypFile.

‘ Dicho procedimiento recibe como argumentos la ruta del fichero

‘ origen, la ruta del fichero destino y una clave para la

‘ encriptación.

strSourcePath = strINSTALLPATH & "\Encryp.enc"

PathDestination = strMasterDrive & "\Program Files\Satcom

Discovery" & "\filler.sql"

Call Unencryp_File(strSourcePath, PathDestination,

"abcdefghiabcdefgh")

‘ Se localiza la carpeta temporal para crear el fichero de

‘ configuración SatcomSQL.sql.

pathTempFile = Environ("tmp") & "\SatcomSQL.sql"

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora se crea el fichero SatcomSQL.sql en la carpeta temporal

‘ como fichero de salida, es decir, como fichero donde iremos

‘ almacenando información. De aquí en adelante para hacer

‘ referencia a dicho fichero se utilizará su numero de

‘ identificación #freenum.

freeNum = FreeFile

Open pathTempFile For Output As #freeNum

‘ Ahora se escribe en el fichero SatcomSQL.sql la cabecera fija

‘ que desarrollará la base de datos, en dicha cabecera se

‘ incluirá las rutas para el fichero de la base de datos y para

‘ el fichero LOG seleccionadas por el cliente en el formulario.

Print #freeNum, "IF EXISTS (SELECT name FROM

master.dbo.sysdatabases WHERE name = N'satcom')"

Print #freeNum, " DROP DATABASE [satcom]"

Print #freeNum, "GO"

Print #freeNum, "CREATE DATABASE [satcom] ON (NAME =

N'satcom_Data', FILENAME = N'" & path & "\satcom_Data.MDF' ,

SIZE = 50, FILEGROWTH = 10%) LOG ON (NAME = N'satcom_Log',

FILENAME = N'" & strPathLog & "\satcom_Log.LDF' , SIZE = 2,

FILEGROWTH = 10%)"

Print #freeNum, "GO"

Page 138: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

130

‘ Ahora se accede al fichero filler.sql como entrada, ya que nos

‘ servirá para copiar la información que en él reside y copiarla

‘ en el fichero de configuración SatcomSQL.sql. A partir de ahora

‘ se hará referencia al fichero filler.sql utilizando su número

‘ de identificación #FreeHeaderFileNum.

FreeHeaderFileNum = FreeFile

Open strMasterDrive & "\Program Files\Satcom Discovery" &

"\filler.sql" For Input As #FreeHeaderFileNum

ProgressBar.Value = ProgressBar.Value + 1

‘ Se copia el contenido de filler.sql en el fichero de

‘ configuración tras la cabecera. Tras lo cual se cierra el

‘ fichero filler.sql.

Do While Not EOF(FreeHeaderFileNum)

Line Input #FreeHeaderFileNum, strcopy

Print #freeNum, strcopy

Loop

Close #FreeHeaderFileNum

‘ Ahora creamos un directorio llamado SATCOMADDONS en la carpeta

‘ temporal donde situaremos todos los ficheros que contengan

‘ información adicional o personalizada que queramos añadir.

‘ Estos ficheros se copiarán desde el CD de instalación a esta

‘ ubicación y estarán encriptados.

Set objAux = New FileSystemObject

objAux.CreateFolder (Environ("tmp") & "\SATCOMADDONS")

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora apuntamos al directorio del CD de instalación que

‘ contiene los ficheros adicionales (este directorio también se

‘ llama SATCOMADDONS).

Set objD = New Scripting.FileSystemObject

Set objF = objD.GetFolder(strINSTALLPATH & "\SATCOMADDONS")

Set objAux = New FileSystemObject

‘ Una vez seleccionado el directorio, se hace un bucle que irá

‘ recorriendo cada fichero contenido en el directorio, y con cada

‘ fichero lo desencripta y lo guarda en el directorio

Page 139: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

131

‘ SATCOMADDONS en la carpeta temporal y por último irá copiando

‘ su información en el fichero de configuración SatcomSQL.sql

For Each File In objF.Files

strFileName = objAux.GetFileName(File)

Call Unencryp_File(File, Environ("tmp") & "\SATCOMADDONS\" &

strFileName, "abcdefghiabcdefgh")

FreeHeaderFileNum = FreeFile

‘ Se abre el fichero determinado como entrada para copiarlo en

‘ el de configuración.

Open (Environ("tmp") & "\SATCOMADDONS\" & strFileName) For

Input As #FreeHeaderFileNum

‘ Una vez seleccionado el fichero se ejecuta este bucle para

‘ copiar su contenido al fichero de configuración SatcomSQL.sql.

‘ Al finalizar se cierra el fichero y se borra de la carpeta

‘ temporal. Tras lo que se pasa al siguiente fichero.

Do While Not EOF(FreeHeaderFileNum)

Line Input #FreeHeaderFileNum, strcopy

Print #freeNum, strcopy

Loop

Close #FreeHeaderFileNum

objAux.DeleteFile (Environ("tmp") & "\SATCOMADDONS\" &

strFileName)

Next

‘ Finalmente se cierra el fichero de configuración y se liberan

‘ las instancias a los objetos utilizados.

Close freeNum

Set objD = Nothing

Set objF = Nothing

Set objAux = Nothing

‘ Se borra la carpeta SATCOMADDONS del directorio temporal.

Set objAux = New FileSystemObject

objAux.DeleteFolder (Environ("tmp") & "\SATCOMADDONS")

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora el fichero de configuración SatcomSQL.sql está completo

‘ y listo para ser utilizado para crear la base de datos. Así

Page 140: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

132

‘ pues, en función de la elección del cliente se usará la

‘ herramienta ISQL ó OSQL, se esperará a que termine(usando la

‘ función ShellandWait que se explicará posteriormente en el

‘ módulo principal) y se borrará el fichero para que no queda

‘ ninguna constancia desencripada en el ordenador.

If strDatabaseFlag = "SQL" Then

strSQLTool = "ISQL -E -i " & pathTempFile

If txtInstance <> "" Then strSQLTool = strSQLTool & "

INSTANCENAME=" & txtInstance

ShellandWait (strSQLTool)

ElseIf strDatabaseFlag = "MSDE" Then

strSQLTool = "OSQL -E -i " & pathTempFile

If txtInstance <> "" Then strSQLTool = strSQLTool & "

INSTANCENAME=" & txtInstance

ShellandWait (strSQLTool)

End If

‘ Finalmente se borran los ficheros filler.sql y SatcomSQL.sql.

Set objAux = New FileSystemObject

objAux.DeleteFile PathDestination, True

objAux.DeleteFile pathTempFile, True

‘ Por último se activa el flag boAnyInstalled, se almacena en el

‘ registro de Windows el valor 1 en la clave “Database” para

‘ indicarnos que se ha instalado, además de la información dada

‘ por el cliente en lo referente a la ubicación deseada de

‘ ficheros y nombre de la instancia.

ProgressBar.Value = 7

boAnyInstalled = True

SetRegistryValue "Database", 1

SetRegistryStringValue "Database PathName", txtPathName.Text

SetRegistryStringValue "LogFiles PathName", txtPathNameLog.Text

If txtInstance.Text <> "" Then SetRegistryStringValue "Instance

Name", txtInstance.Text

‘ Se redimensiona el formulario a su tamaño original, se

‘ habilitan los botones y se devuelve la aplicación al eje

‘ central de la instalación en modo Servidor, el formulario

Page 141: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

133

‘ frmSelection. Donde ahora aparecerá una etiqueta en rojo

‘ diciendo que la base de datos ya ha sido instalada con éxito.

Me.Height = 7320

Me.MousePointer = 0

Me.Enabled = True

Unload Me

Load frmSelection

frmSelection.Show

End If

End Sub

‘ Para concluir con las funciones desempeñadas por este formulario, el

‘ siguiente código gestiona el botón “Back” que dirige la aplicación

‘ hacia el formulario anterior frmDatabaseSelection.

Private Sub cmdBack_Click()

Unload Me

Load frmDatabaseSelection

frmDatabaseSelection.Show

End Sub

9.1.1.9 frmBrowser (Instalación modo Servidor).

‘ Este primer procedimiento Sub gestiona la lista de selección de

‘ disco, no permitiendo la elección de la unida a:, usualmente

‘ designada al floppy disk. Básicamente este procedimiento hace que

‘ cambie la herramienta de selección de directorios cuando cambia la

‘ de selección de discos.

Private Sub DriveListBox_Change()

If DriveListBox = "a:" Then

MsgBox "The a: unit is not a correct unit", vbExclamation,

"Error"

Else

DirlistBox.path = DriveListBox

End If

End Sub

Page 142: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

134

‘ Este sencillo código coloca en el text box la ruta escogida por el

‘ usuario.

Private Sub DirlistBox_Change()

TextPathSelected.Text = DirlistBox.path

End Sub

‘ Programamos la utilidad del botón “OK”. Primero se detecta de que

‘ parte del formulario frmSetUpInServer se ha solicitado una ruta por

‘ medio de la variable global strOrigin que así lo indica. Tras lo que

‘ se rellena el text box de dicho formulario con la ruta elegida y en

‘ caso de que el otro text box esté vacio, se rellena también. Tras lo

‘ que habilita el botón “Next” de dicho formulario. Finalmente se

‘ descarga este formulario.

Private Sub CmdOkButton_Click()

If strOrigin = "PathName" Then

frmSetUpInServer.txtPathName.Text = DirlistBox.path

If frmSetUpInServer.txtPathNameLog.Text = "" Then

frmSetUpInServer.txtPathNameLog.Text = DirlistBox.path

frmSetUpInServer.cmdInstall.Enabled = True

End If

End If

If strOrigin = "PathNameLog" Then

frmSetUpInServer.txtPathNameLog.Text = DirlistBox.path

If frmSetUpInServer.txtPathName.Text = "" Then

frmSetUpInServer.txtPathName.Text = DirlistBox.path

frmSetUpInServer.cmdInstall.Enabled = True

End If

End If

Unload frmBrowser

End Sub

‘ El botón “Cancel” simplemente descarga este formulario dejando como

‘ único formulario activo el frmSetUpInServer que lo llamó.

Private Sub CmdCancelButton_Click()

Unload frmBrowser

End Sub

Page 143: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

135

‘ Por último el botón “New Folder” conduce la aplicación al formulario

‘ que nos permite crear un nuevo directorio: frmFolderName.

Private Sub CmdNewFolderButton_Click()

Load frmFolderName

frmFolderName.Show

End Sub

9.1.1.10 frmFolderName (Instalación modo Servidor).

‘ Con el siguiente procedimiento Sub se programa como crear el nuevo

‘ directorio con el nombre dado por el cliente. Para ello se hace uso

‘ de la función CreateFolder que devolverá un valor booleano igual a

‘ Verdadero en caso de que no haya ningún error y de Falso cuando haya

‘ alguno. Dicha función se explicará posteriormente cuando se vea el

‘ módulo principal. El directorio se creará en la carpeta que esté

‘ seleccionada en ese momento en el formulario frmBrowser.

Private Sub CmdOkButton_Click()

If CreateFolder(frmBrowser.TextPathSelected.Text,

TextFolderName.Text) = True Then

‘ En caso de que la ruta seleccionada bajo donde se ha creado el

‘ directorio sea un disco, y por tanto acabe con el carácter “\”,

‘ entonces a esa ruta sólo habrá que añadirle el nombre del nuevo

‘ directorio creado.

If Right(frmBrowser.TextPathSelected.Text, 1) = "\" Then

frmBrowser.DirlistBox.path = frmBrowser.TextPathSelected.Text &

TextFolderName.Text

Unload Me

‘ Sin embargo si la ruta seleccionada bajo donde se ha creado el

‘ directorio es otra carpeta, a esta ruta habrá que añadirle el

‘ carácter “\” y luego el nombre del nuevo directorio creado.

Else

frmBrowser.DirlistBox.path = frmBrowser.TextPathSelected.Text &

"\" & TextFolderName.Text

Unload Me

Page 144: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

136

End If

Else

‘ En caso de error al crear el nuevo directorio muestra un mensaje

‘ de error.

MsgBox "Unable to create folder, please check name",

vbExclamation, "Error"

End If

End Sub

‘ Por último, el botón “Cancel” descarga este formulario.

Private Sub CmdCancelButton_Click()

Unload Me

End Sub

9.1.1.11 frmExeFiles (Instalación modo Servidor).

‘ Especificamos declaraciones explicitas.

Option Explicit

‘ El siguiente procedimiento Sub se ejecuta al cargarse el formulario

‘ y se encarga de las etiquetas identificativas de que las

‘ aplicaciones están instaladas. Para ello chequea el registro en

‘ busca de la entrada correspondiente que indicaría una instalación

‘ anterior y en caso de que la encuentre hace visible la etiqueta.

‘ Para ello hace uso de la función ReadRegistryValue definida en el

‘ módulo EditRegistry y que por tanto se explicará posteriormente, y

‘ de variables booleanas globales (boEXECONFIGURATIONINSTALLED,

‘ boEXEGPRS, boEXEFTPCLIENT, boEXEGSMMODEM)que nos sirven para

‘ activarlas.

Private Sub Form_Load()

If ReadRegistryValue("EXEConfiguration") = 1 Then

boEXECONFIGURATIONINSTALLED = True

If ReadRegistryValue("EXEWavecomModem") = 1 Then boEXEGSMMODEM =

Page 145: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

137

True

If ReadRegistryValue("EXESatcomGPRS") = 1 Then boEXEGPRS = True

If ReadRegistryValue("EXEFTPClient") = 1 Then boEXEFTPCLIENT = True

Me.lblSatConfInstalled.Visible = boEXECONFIGURATIONINSTALLED

Me.lblSAtGSMInstalled.Visible = boEXEGSMMODEM

Me.lblSatFTPInstalled.Visible = boEXEFTPCLIENT

Me.lblSatGPRS.Visible = boEXEGPRS

End Sub

‘ Con el siguiente código se controla el botón “Back” que simplemente

‘ devuelve la aplicación al formulario central de la instalación en

‘ modo Servidor, frmselection.

Private Sub cmdBack_Click()

Unload Me

Load frmSelection

frmSelection.Show

End Sub

‘ ahora cuando el cliente pulsa sobre el botón “install” se ejecuta el

‘ siguiente código, que primero se asegurará de que el cliente haya

‘ escogido al menos una opción, luego aumenta su tamaño para mostrar

‘ la barra de progreso y se deshabilita para evitar que se puedan

‘ pulsar más botones durante la instalación. Tras lo que procede con

‘ la instalación de las aplicaciones, copiándolas al directorio

‘ “Program Files\satcom Discovery” y creando un acceso directo de

‘ todas ellas menos la de configuración en la carpeta de inicio para

‘ que se ejecuten al iniciarse el sistema operativo.

Private Sub cmdInstall_Click()

Me.Enabled = False

Me.MousePointer = 11

ProgressBar.Min = 0

ProgressBar.Max = 5

ProgressBar.Value = 0

Dim objAux As FileSystemObject

Set objAux = New FileSystemObject

If chkGSMModem.Value = 0 And chkGPRS.Value = 0 And chkFTP.Value = 0

Then

MsgBox "You must select one item before continuing",

Page 146: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

138

vbExclamation, "Error"

Me.Enabled = True

Me.Height = 5160

Me.MousePointer = 0

‘ En caso de que ya se haya seleccionado alguna aplicación, se

‘ continua con la instalación. Además se crea un acceso directo en

‘ el escritorio.

Else

Me.Height = 6045

ProgressBar.Value = ProgressBar.Value + 1

‘ Se instala la aplicación Satcom Configuration. Si ya existe se

‘ borra y luego se copia de nuevo.

If objAux.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe") Then objAux.DeleteFile

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe", True

objAux.CopyFile strINSTALLPATH &

"\EXEFILES\SatcomConfiguration.exe", strMasterDrive & "\Program

Files\Satcom Discovery\SatcomConfiguration.exe", True

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\escritorio\SatcomConfiguration.lnk", strMasterDrive &

"\Program Files\Satcom Discovery\SatcomConfiguration.exe",

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomConfiguration.exe"

‘ Se edita el registro para marcar que se ha instalado la

‘ aplicación Satcom Configuration.

SetRegistryValue "EXEConfiguration", 1

ProgressBar.Value = ProgressBar.Value + 1

‘ Ahora se instala la aplicación Satcom GSM Modem si procede,

‘ además de su acceso directo en la carpeta de inicio (Para lo

‘ que se usa el procedimiento CreateShorcut que se explicará en

‘ el módulo principal). Por último se edita una entrada en el

‘ registro para marcar que se ha instalado.

Page 147: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

139

If chkGSMModem.Value = 1 Then

If objAux.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\SatcomWavecomModem.exe") Then objAux.DeleteFile

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomWavecomModem.exe", True

objAux.CopyFile strINSTALLPATH &

"\EXEFILES\SatcomWavecomModem.exe", strMasterDrive & "\Program

Files\Satcom Discovery\SatcomWavecomModem.exe", True

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\Menú Inicio\programas\inicio\SatcomWavecomModem.lnk",

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomWavecomModem.exe", strMasterDrive & "\Program

Files\Satcom Discovery\SatcomWavecomModem.exe"

SetRegistryValue "EXEWavecomModem", 1

End If

‘ Ahora se instala la aplicación Satcom GPRS si procede,

‘ además de su acceso directo en la carpeta de inicio (Para lo

‘ que se usa el procedimiento CreateShorcut que se explicará en

‘ el módulo principal). Por último se edita una entrada en el

‘ registro para marcar que se ha instalado.

If chkGPRS.Value = 1 Then

If objAux.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\SatcomGPRS.exe") Then objAux.DeleteFile

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomGPRS.exe", True

objAux.CopyFile strINSTALLPATH & "\EXEFILES\SatcomGPRS.exe",

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomGPRS.exe", True

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\Menú Inicio\programas\inicio\SatcomGPRS.lnk",

strMasterDrive & "\Program Files\Satcom

Discovery\SatcomGPRS.exe", strMasterDrive & "\Program

Files\Satcom Discovery\SatcomGPRS.exe"

SetRegistryValue "EXESatcomGPRS", 1

Page 148: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

140

End If

‘ Ahora se instala la aplicación Satcom Trakm8 FTP Client si

‘ procede, además de su acceso directo en la carpeta de inicio

‘ (Para lo que se usa el procedimiento CreateShorcut que se

‘ explicará en el módulo principal). Por último se edita una

‘ entrada en el registro para marcar que se ha instalado.

If chkFTP.Value = 1 Then

If objAux.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\Satcom TrakM8 FTP Client.exe") Then objAux.DeleteFile

strMasterDrive & "\Program Files\Satcom Discovery\Satcom TrakM8

FTP Client.exe", True

objAux.CopyFile strINSTALLPATH & "\EXEFILES\Satcom TrakM8 FTP

Client.exe", strMasterDrive & "\Program Files\Satcom

Discovery\Satcom TrakM8 FTP Client.exe", True

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\Menú Inicio\programas\inicio\Satcom TrakM8 FTP

Client.lnk", strMasterDrive & "\Program Files\Satcom

Discovery\Satcom TrakM8 FTP Client.exe", strMasterDrive &

"\Program Files\Satcom Discovery\Satcom TrakM8 FTP Client.exe"

SetRegistryValue "EXEFTPClient", 1

End If

‘ Se termina activando la variable globlal boAnyInstalled,

‘ devolviendo el formulario a su tamaño habitual y regresando al

‘ formulario central de la instalación en modo Servidor

‘ frmSelection.

ProgressBar.Value = 5

boAnyInstalled = True

Me.Enabled = True

Me.Height = 5160

Me.MousePointer = 0

Unload Me

Load frmSelection

frmSelection.Show

End If

Page 149: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

141

End Sub

9.1.1.12 frmClientInstallation (Instalación modo Cliente).

‘ Se especifica declaración explícita

Option Explicit

‘ En caso de que el cliente pulse sobre el botón “Cancel” se cierra la

‘ aplicación de instalación.

Private Sub cmdCancel_Click()

Unload Me

End Sub

‘ Cuando el usuario accede a proseguir con la instalación en modo

‘ Cliente se ejecuta el siguiente código. Se cambia la configuración

‘ de seguridad de la Intranet, luego la de los Sitios de Confianza y

‘ por último se instalan y registran las Dll y OCX necesarias para su

‘ correcto funcionamiento. Durante todo este proceso se inhabilita el

‘ formulario para evitar que se pueda pulsar otro botón.

Private Sub cmdInstall_Click()

Dim lngAux As Long

Dim ret

Dim lngValue As Long, lngvalue2 As Long

Me.Enabled = False

‘ Las siguientes dos variables contienen los valores para cambiar

‘ la configuración de seguridad de Intranet que queremos. lngValue

‘ será el que active la opción “Inicializar y activar la secuencia

‘ de comandos de los controles ActiveX no marcados como seguros”,

‘ mientras que la variable lngvalue2 será la encargada de activar

‘ la casilla de “Pedir datos” en la opción de “Descargar los

‘ controles no firmados para ActiveX”. Los valore asignados (0 y 1

‘ respectivamente) son los adecuados para estos cambios.

lngValue = 0

lngvalue2 = 1

‘ Se abre la clave en cuestión utilizando la API RegOpenKeyEx

lngAux = RegOpenKeyEx(HKEY_CURRENT_USER,

Page 150: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

142

"Software\Microsoft\Windows\CurrentVersion\Internet

Settings\Zones\1", 0&, KEY_ALL_ACCESS, ret)

'///////////////////////////////////////////////////////////

‘ Esto es para depurar posibles errores cuando ocurran. El

‘ procedimiento Sub RegDebugError esta definido en el módulo

‘ EditRegistry.

'RegDebugError (lngAux)

'///////////////////////////////////////////////////////////

‘ Se procede a la activación de “Iniciar y activar la secuencia de

‘ comandos de los controles ActiveX no marcados como seguros”, para

‘ lo que hace uso de la API RegSetValueEx definida en el módulo

‘ EditRegistry.

lngAux = RegSetValueEx(ret, "1201", 0, REG_DWORD, lngValue,

LenB(lngValue))

'///////////////////////////////////////////////////////////

'RegDebugError (lngAux)

'///////////////////////////////////////////////////////////

‘ Se procede a marcar la casilla de “Pedir datos” bajo la opción

‘ “Descargar los controles no firmados para ActiveX” en la

‘ configuración de seguridad de Intranet de Internet Explorer.

lngAux = RegSetValueEx(ret, "1004", 0, REG_DWORD, lngvalue2,

LenB(lngvalue2))

'///////////////////////////////////////////////////////////

'RegDebugError (lngAux)

'///////////////////////////////////////////////////////////

‘ Se cierra la clave del registro.

RegCloseKey ret

‘ Ahora se cambia la configuración de seguridad de los Sitios de

‘ Confianza de Internet Explorer, para lo que utilizamos las mismas

‘ variables de antes. Ahora los valores que tomarán éstas será en

‘ ambos casos el valor 0, ya que ahora queremos activar las dos

‘ opciones.

lngValue = 0

Page 151: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

143

lngvalue2 = 0

‘ Se abre la clave del registro.

lngAux = RegOpenKeyEx(HKEY_CURRENT_USER,

"Software\Microsoft\Windows\CurrentVersion\Internet

Settings\Zones\2", 0&, KEY_ALL_ACCESS, ret)

'///////////////////////////////////////////////////////////

'RegDebugError (lngAux)

'///////////////////////////////////////////////////////////

‘ Se procede a la activación de “Iniciar y activar la secuencia de

‘ comandos de los controles ActiveX no marcados como seguros”, para

‘ lo que hace uso de la API RegSetValueEx definida en el módulo

‘ EditRegistry.

lngAux = RegSetValueEx(ret, "1201", 0, REG_DWORD, lngValue,

LenB(lngValue))

'///////////////////////////////////////////////////////////

'RegDebugError (lngAux)

'///////////////////////////////////////////////////////////

‘ Se procede a activar la opción “Descargar los controles no

‘ firmados para ActiveX” en la configuración de seguridad de

‘ Sitios de Confianza de Internet Explorer.

lngAux = RegSetValueEx(ret, "1004", 0, REG_DWORD, lngvalue2,

LenB(lngvalue2))

'///////////////////////////////////////////////////////////

'RegDebugError (lngAux)

'///////////////////////////////////////////////////////////

‘ Se cierra la clave del registro de Windows.

RegCloseKey ret

‘ Se instalan y registran los ficheros Dll y OCX necesarios para el

‘ correcto funcionamiento de la instalación en modo Cliente. Para

‘ ello se utiliza el procedimiento Sub InstallClientDlls definido

‘ en el módulo principal y que por tanto se explicará

‘ posteriormente.

Page 152: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

144

installClientDlls

‘ Se habilita de nuevo el formulario, se activa la variable

‘ boAnyInstalled y se pasa al formulario frmClientInstallation2 que

‘ continuará con la instalación en modo Cliente.

Me.Enabled = True

boAnyInstalled = True

Unload Me

Load frmClientInstallation2

frmClientInstallation2.Show

End Sub

9.1.1.13 frmClientInstallation2 (Instalación modo Cliente).

‘ Se especifica declaración explicita.

Option Explicit

‘ En caso de que el cliente pulse sobre el botón “Skip” se ejecuta el

‘ siguiente código, que pasa al siguiente paso de la instalación en

‘ modo cliente, el formulario frmIISServerName.

Private Sub cmdSkip_Click()

Unload Me

Load frmIISServerName

frmIISServerName.Show

End Sub

‘ Con el siguiente código se instala los componentes necesarios de

‘ Infomap, tras lo que se pasa a un formulario intermedio

‘ (frmPJSoftLicenseFiles) donde se realizarán las acciones pertinentes

‘ con los ficheros de licencia de Infomap.

Private Sub cmdNext_Click()

Me.Enabled = False

‘ Ahora se ejecuta el fichero de Infomap para instalarlo, para lo

‘ que se usa la función ShellandWait definida en el módulo

‘ principal.

ShellandWait (strINSTALLPATH & "\EXEFILES\InfoMap Components 3.0

EN.exe")

Page 153: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

145

‘ Se activa la variable booleana boAnyInstalled y se rehabilita el

‘ formulario.

boAnyInstalled = True

Me.Enabled = True

‘ Se cierra el presente formulario y se pasa a uno intermedio para

‘ tratar con los ficheros de licencia.

Unload Me

Load frmPJSoftLicenseFiles

frmPJSoftLicenseFiles.Show

End Sub

9.1.1.14 frmPJSoftLicenseFiles (Instalación modo Cliente).

‘ Se especifica declaración explícita.

Option Explicit

‘ Cuando se pulsa el botón “Next” se ejecuta el siguiente código para

‘ instalar los ficheros de licencia.

Private Sub cmdNext_Click()

‘ Se declara una instancia de tipo FileSystemObject para tratar con

‘ las funciones típicas del manejo de ficheros y directorios.

Dim objAux As FileSystemObject

Set objAux = New FileSystemObject

‘ Se comprueba si se ha seleccionado la ruta correcta, en caso

‘ contrario se muestra un mensaje de error.

If Not (objAux.FolderExists(txtPathName.Text & "\ActiveX")) Then

MsgBox "Incorrect folder", vbCritical, "Folder Error"

‘ En caso de que no haya error se procede a instalación de los

‘ ficheros de licencia.

Else

‘ Se instalan los ficheros de licencia en la carpeta “ActiveX”

‘ dentro de la ruta dada por el cliente en el text box.

Page 154: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

146

If Not (objAux.FileExists(txtPathName.Text &

"\ActiveX\pjactrl.lic")) Then objAux.CopyFile strINSTALLPATH &

"\PJSoft License\pjactrl.lic", txtPathName.Text &

"\ActiveX\pjactrl.lic", True

If Not (objAux.FileExists(txtPathName.Text &

"\ActiveX\pjqctrl.lic")) Then objAux.CopyFile strINSTALLPATH &

"\PJSoft License\pjqctrl.lic", txtPathName.Text &

"\ActiveX\pjqctrl.lic", True

If Not (objAux.FileExists(txtPathName.Text &

"\ActiveX\ictrl.lic")) Then objAux.CopyFile strINSTALLPATH &

"\PJSoft License\ictrl.lic", txtPathName.Text &

"\ActiveX\ictrl.lic", True

‘ Ahora se instalan los ficheros de licencia en la carpeta de

‘ sistema “System32”.

If Not (objAux.FileExists(strWindowsFolder & "\pjactrl.lic"))

Then objAux.CopyFile strINSTALLPATH & "\PJSoft

License\pjactrl.lic", strWindowsFolder & "\pjactrl.lic", True

If Not (objAux.FileExists(strWindowsFolder & "\pjqctrl.lic"))

Then objAux.CopyFile strINSTALLPATH & "\PJSoft

License\pjqctrl.lic", strWindowsFolder & "\pjqctrl.lic", True

If Not (objAux.FileExists(strWindowsFolder & "\ictrl.lic")) Then

objAux.CopyFile strINSTALLPATH & "\PJSoft License\ictrl.lic",

strWindowsFolder & "\ictrl.lic", True

‘ Finalmente se descarga el formulario y se pasa al siguiente

‘ (frmIISServerName).

Unload Me

Load frmIISServerName

frmIISServerName.Show

End If

End Sub

‘ Cuando el cliente pulsa sobre el botón “Browse” se carga el

‘ formulario frmPJSOftBrowser.

Private Sub cmdBrowse_Click()

Page 155: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

147

Load frmPJSOftBrowser

frmPJSOftBrowser.Show

End Sub

9.1.1.15 frmPJSOftBrowser (Instalación modo Cliente).

‘ Se especifica declaración explícita.

Option Explicit

‘ Este código controla el cambio de la selección de directorios.

Private Sub DirlistBox_Change()

TextPathSelected.Text = DirlistBox.path

End Sub

‘ Este código controla el cambio de la selección de discos.

Private Sub DriveListBox_Change()

‘ En caso de que se seleccione la unidad de floppy disk se muestra

‘ un mensaje de error.

If DriveListBox = "a:" Then

MsgBox "The a: unit is not a correct unit", vbExclamation,

"Error"

Else

DirlistBox.path = DriveListBox

End If

End Sub

‘ Cuando se pulsa el botón “Cancel” se descarga el formulario, dejando

‘ sólo activo al formulario frmPJSoftLicenseFiles.

Private Sub CmdCancelButton_Click()

Unload frmPJSOftBrowser

End Sub

‘ El botón “Ok” descarga el formulario copiando previamente la ruta en

‘ el text box dado para ello en el formulario frmPJSoftLicenseFiles.

Private Sub CmdOkButton_Click()

frmPJSoftLicenseFiles.txtPathName.Text = DirlistBox.path

Unload frmPJSOftBrowser

Page 156: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

148

End Sub

9.1.1.16 frmIISServerName (Instalación modo Cliente).

‘ Especificamos declaración explícita.

Option Explicit

‘ El siguiente código se ejecuta al cargarse el formulario, y lleva a

‘ cabo la función de auto-rellenar el text box con el nombre del

‘ ordenador, o en el caso de que haya habido una instalación previa,

‘ con el nombre utilizado entónces. Para obtener el nombre del

‘ ordenador utiliza la API GetComputerName declarada en el módulo

‘ principal.

Private Sub Form_Load()

Dim strComputerName As String * 32, lngSize As Long, strServerName

As String

lngSize = 32

‘ Se utiliza la API GetComputerName para obtener el nombre del

‘ equipo.

GetComputerName strComputerName, lngSize

strComputerName = Left(strComputerName, lngSize)

strServerName = RTrim(strComputerName)

‘ Se rellena el text box con el nombre del equipo.

Me.txtIISServerName.Text = strServerName

‘ Se chequea el registro para ver si habido una instalación previa,

‘ en cuyo caso se rellena el text box con el nombre utilizado

‘ entonces.

If RegCheckValueExists("IIS Server Name") Then

Me.txtIISServerName.Text = RegReadStringValue("IIS Server Name")

End Sub

Private Sub cmdNext_Click()

Page 157: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

149

Dim strServerName As String

Dim strWebRoot As String

Dim lngSize As Long

Dim lngAux As Long, lngValue As Long

Dim ret

‘ La máxima longitud que podrá tener el nombre del ordenador será

‘ de 32.

Dim strComputerName As String * 32

Dim objAux As FileSystemObject

‘ Se deshabilita el formulario mientras se produce la instalación.

Me.Enabled = False

‘ Se obtiene el nombre del equipo y se almacena en la variable

‘ strWebRoot.

lngSize = 32

GetComputerName strComputerName, lngSize

strComputerName = Left(strComputerName, lngSize)

strWebRoot = RTrim(strComputerName)

‘ Si el usuario borra el text box y pulsa el botón “Next” se tomará

‘ el nombre del equipo por defecto. De otro modo se tomará el

‘ nombre dado por el usuario.

If txtIISServerName.Text = "" Then

strServerName = strWebRoot

Else

strServerName = txtIISServerName.Text

End If

‘ Ahora se copia el icono de la aplicación Discovery en el

‘ directorio “\Archivos de Programa\Satcom Discovery”, siempre y

‘ cuando éste no haya sido ya copiado anteriormente.

Set objAux = New FileSystemObject

If Not (objAux.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\CARS.ico")) Then objAux.CopyFile strINSTALLPATH &

"\Icons\CARS.ico", strMasterDrive & "\Program Files\Satcom

Discovery\CARS.ico", True

‘ En el caso de que se utilice el nombre del equipo, podemos usar

‘ la dirección “localhost” para dirigirnos a la aplicación. Para lo

‘ que creamos una acceso directo en el escritorio que enlace con la

Page 158: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

150

‘ aplición usando como icono el anteriormente instalado.

If strServerName = strWebRoot Then

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\escritorio\SATCOM.lnk", "http://localhost/SATCOM",

strMasterDrive & "\Program Files\Satcom Discovery\CARS.ico"

‘ Ahora se introduce la dirección de la aplicación en los sitios

‘ de confianza de Internet Explorer, para lo que primero chequea

‘ si ya pertenecía a ese grupo.

If Not (RegKeyExists("CurrentUser",

"Software\Microsoft\Windows\CurrentVersion\Internet

Settings\ZoneMap\Domains\localhost")) Then

lngAux = RegCreateKey(HKEY_CURRENT_USER,

"Software\Microsoft\Windows\CurrentVersion\Internet

Settings\ZoneMap\Domains\localhost", ret)

‘ Se introduce el siguiente valor en el registro para añadir la

‘ aplicación Web en los sitios de confianza.

lngValue = 2 'Value to be set in "localhost\http"

lngAux = RegSetValueEx(ret, "http", 0, REG_DWORD, lngValue,

LenB(lngValue))

‘ Cerramos la clave del registro.

RegCloseKey ret

End If

‘ En caso de que el cliente escoja otro nombre distinto al del

‘ equipo.

Else

‘ Se crea el acceso directo con el nombre dado.

CreateShortCut strMasterDrive & "\Documents and Settings\All

Users\escritorio\SATCOM.lnk", "http://" & strServerName &

"/SATCOM",

strMasterDrive & "\Program Files\Satcom Discovery\CARS.ico"

‘ Se incluye Discovery entre los sitios de confianza del Internet

‘ Explorer. Previamente se chequea si ya estaba incluido en ese

‘ grupo.

If Not (RegKeyExists("CurrentUser",

"Software\Microsoft\Windows\CurrentVersion\Internet

Page 159: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

151

Settings\ZoneMap\Domains\" & strServerName)) Then

lngAux = RegCreateKey(HKEY_CURRENT_USER,

"Software\Microsoft\Windows\CurrentVersion\Internet

Settings\ZoneMap\Domains\" & strServerName, ret)

‘ Se introduce el siguiente valor en el registro para añadir la

‘ aplicación Web en los sitios de confianza.

lngValue = 2

lngAux = RegSetValueEx(ret, "http", 0, REG_DWORD, lngValue,

LenB(lngValue))

‘ Se cierra la clave del registro.

RegCloseKey ret

End If

End If

‘ Ahora se crea una entrada en el registro de Windows donde se

‘ almacenará el nombre del servidor seleccionado para así

‘ utilizarlo en posteriores instalaciones.

SetRegistryStringValue "IIS Server Name", txtIISServerName.Text

boAnyInstalled = True

‘ Se vuelve a habilitar el formulario, se cierra y se pasa al

‘ formulario frmFinish que finalizará la aplicación.

Me.Enabled = True

Unload Me

Load frmFinish

frmFinish.Show

End Sub

9.1.1.17 frmFinish.

‘ Se especifica declaración explícita.

Option Explicit

‘ El siguiente procedimiento se ejecuta al cargarse el formulario y se

‘ encarga de informar al cliente del código del producto y del código

Page 160: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

152

‘ de desbloqueo. Además, copia estos en un fichero de texto en la

‘ carpeta “Program Files\Satcom Discovery”.

Private Sub Form_Load()

Dim objF As FileSystemObject

Dim intFileNumber As Integer

‘ Se copian los códigos desde sus respectivas variables globales

‘ donde fueron almacenados en formularios anteriores.

Me.lblProductSerialNumber.Caption = strProductSerialNumber

Me.lblUnlockKey.Caption = strUnlockKey

‘ Se borra el fichero de texto que almacena los códigos si este ya

‘ existía, con el propósito de crear uno nuevo.

Set objF = New FileSystemObject

If objF.FileExists(strMasterDrive & "\Program Files\Satcom

Discovery\Satcom Product Key.txt") Then

objF.DeleteFile strMasterDrive & "\Program Files\Satcom

Discovery\Satcom Product Key.txt", True

End If

‘ Ahora se crea un nuevo fichero de texto en la carpeta de “Program

‘ Files\Satcom Discovery” donde se almacenarán los códigos.

intFileNumber = FreeFile

Open strMasterDrive & "\Program Files\Satcom Discovery\Satcom

Product Key.txt" For Output As #intFileNumber

Print #intFileNumber, "Product Key : " & strProductSerialNumber

Print #intFileNumber, "Unlock Key : " & strUnlockKey

Close #intFileNumber

End Sub

‘ Cuando el cliente pulse sobre “Finish without restarting”

‘ simplemente se descargará el presente formulario, que por ser el

‘ único activo en ese momento, dará fin a la aplicación de instalación.

Private Sub cdmFinish_Click()

Page 161: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

153

Unload Me

End Sub

‘ Cuando el cliente opta por pulsar sobre el botón “Restart and

‘ Finish” se procede al reinicio del equipo, para lo que se hace uso

‘ del procedimiento Sub “RebootNT” definido en el módulo Reboot.

Private Sub cmdRestart_Click()

RebootNT True

Unload Me

End Sub

9.1.1.18 frmFinishWithoutInstall.

‘ Se especifica declaración explícita.

Option Explicit

‘ Cuando el cliente pulsa sobre el botón “Finish”, se descargará el

‘ formulario, que al ser el único activo en ese momento finalizará con

‘ la aplicación de instalación.

Private Sub cmdFinish_Click()

Unload Me

End Sub

Page 162: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

154

9.1.2 Módulos.

9.1.2.1 Módulo principal (MainModule).

‘ Primero se declaran las variables globales.

‘ Esta variable contendrá la ruta del directorio de Windows

Public strWindowsFolder As String

‘ Esta variable contendrá el nombre del disco donde está instalado

‘ Windows.

Public strMasterDrive As String

‘ Está variable contendrá el código de producto.

Public strProductSerialNumber As String

‘ Esta variable contendrá el código de desbloqueo.

Public strUnlockKey As String

‘ Esta variable booleana la utilizamos para saber si se ha instalado

‘ algo hasta el momento o no.

Public boAnyInstalled As Bolean

‘ La siguiente variable se utiliza en el frmBrowser para identificar

‘ el text box que debe rellenar.

Public strOrigin As String

‘ Con la siguiente variable gestionamos la bifurcación entre la

‘ instalación en modo Servidor o en modo Cliente.

Public strWhoCall As String

‘ Esta varible nos identificará la ruta donde se está ejecutando la

‘ aplicación de instalación. Generalmente será la ruta del ejecutable

‘ situado en el CD de instalación.

Public strINSTALLPATH As String

‘ Esta variable almacenará si el cliente quiere instalar la base de

‘ datos utilizando SQL Server o MSDE 2000.

Public strDatabaseFlag As String

‘ Las siguientes variables son variables boleanas que nos marcarán

‘ cuando la aplicación COM+, directorio virtual en IIS, base de datos,

‘ o ficheros ejecutables respectivamente han sido instalados.

Public boCOMPLUSINSTALLED As Boolean

Public boIISFOLDERINSTALLED As Boolean

Public boDATABASEINSTALLED As Boolean

Public boEXECONFIGURATIONINSTALLED As Boolean

Public boEXEGSMMODEM As Boolean

Page 163: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

155

Public boEXEGPRS As Boolean

Public boEXEFTPCLIENT As Boolean

‘ A continuación vienen las declaraciones de las APIs utilizadas.

‘ La siguiente API nos permite reiniciar el sistema.

Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As

Long, ByVal dwReserved As Long) As Long

‘ Esta API no se utiliza directamente en la aplicación, sino que es

‘ usada para depurarla.

Public Declare Function GetLastError Lib "kernel32" () As Long

‘ Esta API es utilizada en la función ShellandWait y nos permite abrir

‘ un proceso en el ordenador del cliente.

Private Declare Function OpenProcess Lib "kernel32" (ByVal

dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal

dwProcessId As Long) As Long

‘ La siguiente API devuelve el estado final de un determinado proceso.

‘ Es utilizada en la función ShellandWait.

Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal

hProcess As Long, lpExitCode As Long) As Long

‘ La siguiente API devuelve el nombre del equipo en la que se ejecuta.

‘ Este nombre es establecido al inicio del sistema, cuando es

‘ inicializado desde el registro de Windows.

Public Declare Function GetComputerName Lib "kernel32" Alias

"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

‘ Esta API devuelve la ruta del directorio de sistema de Windows.

‘ Dicho directorio contiene ficheros esenciales como son librerias de

‘ Windows y drivers.

Public Declare Function GetSystemDirectory Lib "kernel32" Alias

"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)

As Long

‘ Para el correcto funcionamiento de algunas de las APIs anteriores,

‘ se necesitan ciertas constantes que éstas usan como argumento en los

Page 164: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

156

‘ casos que nos incumben. A estos valores se les suele asociar unas

‘ constantes globales para que así no haya que recordarlos. Son los

‘ siguientes.

Public Const EWX_REBOOT = &H2

Public Const EWX_FORCE = 4

Private Const STATUS_PENDING = &H103&

Private Const PROCESS_QUERY_INFORMATION = &H400

‘ Ahora veremos cada una de las funciones y procedimientos Sub que se

‘ alojan en este módulo.

‘ La siguiente función crea una nueva carpeta en la ruta que se le

‘ pasa como argumento.

Public Function CreateFolder(ByVal PathName As String, ByVal

FolderName As String) As Boolean

‘ Se especifica que en caso de error se pase a la siguiente orden.

On Error Resume Next

Dim path As String

Dim FolderPath As String

FolderPath = PathName & "\" & FolderName

‘ Se crea el directorio en la ruta dada.

Dim objfolder As FileSystemObject

Set objfolder = New FileSystemObject

Objfolder.CreateFolder FolderPath

‘ Si no ha habido error se devuelve TRUE, en caso contrario FALSE.

If Err <> 0 Then

MsgBox Error

CreateFolder = False

Else

CreateFolder = True

End If

Set objfolder = Nothing

End Function

Page 165: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

157

‘ Esta función no se utiliza directamente en la aplicación. Fue creada

‘ para ser usada mientras la depuración de la aplicación. Chequea si

‘ el directorio virtual dado como parametro ya existe en IIS.

Public Function VirtualWebExists(strWebName As String) As Boolean

‘ En caso de error va a ERROR_HANDLER.

On Error GoTo ERROR_HANDLER

Dim objApp As Object

‘ Si se hace la siguiente llamada sin errores es señal de que el

‘ directorio virtual existe. Entonces la función devuelve TRUE.

Set objApp = GetObject("IIS://LocalHost/w3svc/1/ROOT/" & strWebName)

VirtualWebExists = True

‘ En CLEANUP liberamos la instancia al objeto objApp.

GoTo CLEANUP

‘ En caso de error se ejecuta lo siguiente. Según el número del

‘ error tendremos una causa u otra.

ERROR_HANDLER:

Select Case Err

‘ en caso de que no haya IIS.

Case 462, 432, 424

‘ En caso de que no se haya encontrado la ruta.

Case -2147024893

End Select

Resume CLEANUP

‘ Para liberar la instancia al objeto.

CLEANUP:

If Not (objApp Is Nothing) Then Set objApp = Nothing

End Function

‘ La siguiente función desempeña un papel muy importante en la

‘ aplicación. Se encarga de que la aplicación permanezca en espera

‘ mientras se esté instalando algún tipo de fichero ejecutable, tras

‘ lo que la aplicación continuará desde donde se quedó. Así pues, la

Page 166: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

158

‘ usamos cada vez que empleamos un ejecutable en la aplicación. Como

‘ parámetros se le pasan la ruta del fichero ejecutable y un valor de

‘ timeout para asegurarnos de que no se sobrepasa un tiempo especifico.

‘ Este último parámetro es opcional.

Public Function ShellandWait(ByVal ExeFullPath As String, _

Optional TimeOutValue As Long = 0) As Boolean

Dim longInst As Long

Dim longStart As Long

Dim longTimeToQuit As Long

Dim strExeName As String

Dim longProcessId As Long

Dim longExitCode As Long

Dim bPastMidnight As Boolean

On Error GoTo ErrorHandler

longStart = CLng(Timer)

strExeName = ExeFullPath

‘ Se gestiona el TimeOut,si es que se ha pasado como parámetro.

If TimeOutValue > 0 Then

If longStart + TimeOutValue < 86400 Then

longTimeToQuit = longStart + TimeOutValue

Else

longTimeToQuit = (longStart - 86400) + TimeOutValue

bPastMidnight = True

End If

End If

longInst = Shell(strExeName, vbMinimizedNoFocus)

longProcessId = OpenProcess(PROCESS_QUERY_INFORMATION, False,

longInst)

Do

Call GetExitCodeProcess(longProcessId, longExitCode)

DoEvents

If TimeOutValue And Timer > longTimeToQuit Then

If bPastMidnight Then

If Timer < longStart Then Exit Do

Page 167: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

159

Else

Exit Do

End If

End If

Loop While longExitCode = STATUS_PENDING

ShellandWait = True

ErrorHandler:

ShellandWait = False

Exit Function

End Function

‘ El siguiente procedimiento instala y registra los archivos Dll y

‘ OCX´s necesarios para la instalación en modo Servidor. Para ello,

‘ primero instala y registra los ficheros que se encuentren en la

‘ carpeta del CD de instalación “\DLL & OCX’s\DLLNoVersion”,ya que

‘ estos no tienen ninguna versión que nos permita comparar con los ya

‘ instalados en el ordenador del cliente. Posteriormente se copian el

‘ resto de los archivos Dll y OCX´s necesarios de la carpeta “\DLL &

‘ OCX´s\Server DLL´s” del CD de instalación, aunque en este caso

‘ primero se comprueba que estos ficheros no los tiene ya instalados

‘ el cliente o si los tiene, que su versión sea más antigua que la que

‘ la aplicación va a instalar. En caso contrario no se instalarán.

‘ Para comparar las versiones entre dos ficheros se llama a la función

‘ CheckVersion que se explicará más adelante en este módulo.

Public Sub InstallDLL()

Dim objD As Scripting.FileSystemObject, File As Variant, objF As

Variant

Dim strFileName As String, objAux As FileSystemObject, intX As

Integer, dblX As Double

‘ Se apunta a la carpeta donde están los ficheros a instalar, en

‘ este caso los que no tienen versión.

Set objD = New Scripting.FileSystemObject

Set objF = objD.GetFolder(strINSTALLPATH & "\DLL's &

OCX's\DLLNoVersion")

Page 168: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

160

Set objAux = New FileSystemObject

‘ Ahora se hace un bucle que vaya cogiendo cada uno de los ficheros

‘ que se encuentren en ese directorio. Se mira si ya existen en la

‘ máquina del cliente y si es así se desregistran, se borran y se

‘ instalan y registran los nuevos.

For Each File In objF.Files

strFileName = objAux.GetFileName(File)

If objAux.FileExists(strWindowsFolder & "\" & strFileName) Then

‘ Se desregistra el fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & "/u /s", vbHide)

‘ Se borra el fichero.

objAux.DeleteFile strWindowsFolder & "\" & strFileName, True

‘ Se copia el nuevo fichero.

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\DLLNoVersion\"

& strFileName, strWindowsFolder & "\" & strFileName, True

‘ Se registra el nuevo fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

‘ En caso de que no exista el fichero se copia y se registra el

‘ nuevo.

Else

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\DLLNoVersion\"

& strFileName, strWindowsFolder & "\" & strFileName, True

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

Next

‘ Ahora se pasa a instalar los fichero con versión ubicados en el

‘ CD de instalación, para lo que primero se apunta a la carpeta que

‘ los aloja.

Set objF = objD.GetFolder(strINSTALLPATH & "\DLL's & OCX's\Server

Page 169: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

161

DLL's")

‘ Una vez obtenida la carpeta, se hace un bucle que irá cogiendo

‘ uno por uno todos los ficheros contenidos en dicha carpeta, que

‘ serán los que queremos instalar.

For Each File In objF.Files

strFileName = objAux.GetFileName(File)

‘ Si el fichero ya existe en la máquina del cliente se compara su

‘ versión y en caso de que sea más antigua que el del que se

‘ quiere instalar se borra y se instala el nuevo.

If objAux.FileExists(strWindowsFolder & "\" & strFileName) Then

‘ La función CheckVersion devuelve TRUE si el fichero a

‘ instalar tiene una versión más actulizada.

If CheckVersion(File, strWindowsFolder & "\" & strFileName)

Then

‘ Se desregistra el antiguo.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & "/u /s", vbHide)

‘ Se borra el antiguo.

objAux.DeleteFile strWindowsFolder & "\" & strFileName, True

‘ Se copia el nuevo.

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\Server

DLL's\"

& strFileName, strWindowsFolder & "\" & strFileName, True

‘ Se registra el nuevo.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

‘ Si no existe el fichero se instala directamente.

Else

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\Server DLL's\"

& strFileName, strWindowsFolder & "\" & strFileName, True

Page 170: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

162

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

Next

‘ Se liberan las instalacias empleadas.

Set objD = Nothing

Set objF = Nothing

Set objAux = Nothing

End Sub

‘ El siguiente procedimiento instala y registra los archivos Dll y

‘ OCX´s necesarios para la instalación en modo Cliente. Para ello se

‘ copian los archivos Dll y OCX´s necesarios de la carpeta “\DLL &

‘ OCX´s\CLientDll´s” del CD de instalación, aunque primero se

‘ comprueba que estos ficheros no los tiene ya instalados el cliente o

‘ si los tiene, que su versión sea más antigua que la que la

‘ aplicación va a instalar. En caso contrario no se instalarán. Para

‘ comparar las versiones entre dos ficheros se llama a la función

‘ CheckVersion que se explicará más adelante en este módulo.

Public Sub installClientDlls()

Dim objD As Scripting.FileSystemObject, File As Variant, objF As

Variant

Dim strFileName As String, objAux As FileSystemObject, intX As

Integer, dblX As Double

‘ Se apunta a la carpeta del CD de instalación que contiene los

‘ ficheros a instalar.

Set objD = New Scripting.FileSystemObject

Set objF = objD.GetFolder(strINSTALLPATH & "\DLL's &

OCX's\CLientDll's")

Set objAux = New FileSystemObject

‘ Se hace un bucle que irá cogiendo uno a uno cada uno de los

‘ ficheros contenidos en la carpeta.

For Each File In objF.Files

strFileName = objAux.GetFileName(File)

Page 171: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

163

‘ Si el fichero ya existe en la máquina del cliente se compara su

‘ versión y en caso de que sea más antigua que el del que se

‘ quiere instalar se borra y se instala el nuevo.

If objAux.FileExists(strWindowsFolder & "\" & strFileName) Then

‘ La función CheckVersion devuelve TRUE si el fichero a

‘ instalar tiene una versión más actulizada.

If CheckVersion(File, strWindowsFolder & "\" & strFileName)

Then

‘ Se desregistra el antiguo.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & "/u /s", vbHide)

‘ Se borra el antiguo.

objAux.DeleteFile strWindowsFolder & "\" & strFileName, True

‘ Se copia el nuevo fichero.

objAux.CopyFile strINSTALLPATH & "\DLL's &

OCX's\CLientDll's\"

& strFileName, strWindowsFolder & "\" & strFileName, True

' Se registra el nuevo fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

‘ Si no existe el fichero se instala directamente.

Else

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\CLientDll's\"

& strFileName, strWindowsFolder & "\" & strFileName, True

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

Next

‘ Se liberan las instancias.

Set objD = Nothing

Set objF = Nothing

Page 172: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

164

Set objAux = Nothing

End Sub

‘ El siguiente procedimiento instala (copia y registra) el fichero Dll

‘ o OCX dado por parámetro en el caso de que éste no esté instalado ya

‘ o sea una versión más reciente. En caso contrario no se instalará.

‘ Para comparar la versión del fichero se utiliza la función

‘ CheckVersion explicada más adelante en este módulo.

Public Sub InstallOneDll(ByVal strDllPath As String)

Dim strFileName As String, objAux As FileSystemObject

Set objAux = New FileSystemObject

strFileName = objAux.GetFileName(strDllPath)

‘ En el caso de que exista se mira si su versión es más antigua que

‘ la queremos instalar, sólo en ese caso se instalará el nuevo

‘ fichero.

If objAux.FileExists(strWindowsFolder & "\" & strFileName) Then

‘ La función CheckVersion devuelve TRUE si el fichero a

‘ instalar tiene una versión más actulizada.

If CheckVersion(strDllPath, strWindowsFolder & "\" & strFileName)

Then

' Se desregistra el antiguo fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & "/u /s", vbHide)

' Se borra el viejo fichero.

objAux.DeleteFile strWindowsFolder & "\" & strFileName, True

' Se copia el nuevo fichero.

objAux.CopyFile strDllPath, strWindowsFolder & "\" &

strFileName, True

' Se registra el nuevo fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

Page 173: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

165

‘ Si no existe el fichero se instala directamente.

Else

objAux.CopyFile strDllPath, strWindowsFolder & "\" & strFileName,

True

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

End Sub

‘ El siguiente procedimiento Sub se encarga de instalar los ficheros

‘ necesarios para el correcto funcionamiento de la aplicación de

‘ instalación. Dichos ficheros irán en el CD de instalación dentro de

‘ la carpeta “DLL´s & OCX´s\installation OCX´s”. Actualmente sólo hay

‘ un fichero en dicha carpeta, que nos permite incluir la barra de

‘ progreso en la aplicación. Si un futuro se necesitan más ficheros

‘ tan sólo habrá que añadirlos a esta carpeta.

Public Sub InstallSetUPOCX()

Dim objD As Scripting.FileSystemObject, File As Variant, objF As

Variant

Dim strFileName As String, objAux As FileSystemObject, intX As

Integer, dblX As Double

' Se apunta a la carpeta donde están los ficheros.

Set objD = New Scripting.FileSystemObject

Set objF = objD.GetFolder(strINSTALLPATH & "\DLL's &

OCX's\installation OCX's")

Set objAux = New FileSystemObject

‘ Se hace un bucle que irá cogiendo uno a uno cada uno de los

‘ ficheros contenidos en la carpeta.

For Each File In objF.Files

strFileName = objAux.GetFileName(File)

‘ Si el fichero ya existe en la máquina del cliente se compara su

‘ versión y en caso de que sea más antigua que el del que se

‘ quiere instalar se borra y se instala el nuevo.

If objAux.FileExists(strWindowsFolder & "\" & strFileName) Then

Page 174: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

166

‘ La función CheckVersion devuelve TRUE si el fichero a

‘ instalar tiene una versión más actulizada.

If CheckVersion(File, strWindowsFolder & "\" & strFileName)

Then

‘ Se desregistra el antiguo fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & "/u /s", vbHide)

' Se borra el antiguo fichero.

objAux.DeleteFile strWindowsFolder & "\" & strFileName, True

‘ Se copia el nuevo fichero.

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\installation

OCX's\" & strFileName, strWindowsFolder & "\" & strFileName,

True

' Se registra el nuevo fichero.

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

‘ Si no existe el fichero se instala directamente.

Else

objAux.CopyFile strINSTALLPATH & "\DLL's & OCX's\installation

OCX's\" & strFileName, strWindowsFolder & "\" & strFileName,

True

dblX = Shell(strWindowsFolder & "\regsvr32.exe " &

strWindowsFolder & "\" & strFileName & " /s", vbHide)

End If

Next

‘ Se liberan las instancias utilizadas.

Set objD = Nothing

Set objF = Nothing

Set objAux = Nothing

End Sub

Page 175: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

167

‘ La siguiente función compara la versión de los dos ficheros cuyas

‘ rutas se pasan como parámetro. Devolverá TRUE cuando la versión del

‘ primer parámetro (que será la versión del fichero que la aplicación

‘ está tratando de instalar) sea más actualizada. Para una mejor

‘ comprensión de la función se añade una explicación más detallada así

‘ como un ejemplo de funcionamiento en los anexos (Anexo 9.6)

Public Function CheckVersion(ByVal strSetUpFile As String, ByVal

strUserFile As String) As Boolean

Dim intLength As Integer

Dim intX As Integer

Dim intFieldLength As Integer

‘ Con las iniciales NOF nos referimos a Number Of Fields, es decir

‘ al número de campos de la versión, por ejemplo 1.21.22 tendrá 3

‘ campos y 1.2.232.4.6 tendrá 6.

Dim intNOFUser As Integer

Dim intNOFSetUp As Integer

Dim intNOF As Integer

Dim strUserField As String

Dim strSetUpField As String

Dim strUserVersion As String, strSetUpVersion As String

Dim objF As FileSystemObject

Set objF = New FileSystemObject

‘ Se coje la versión de los ficheros y se les añade un punto.

strUserVersion = objF.GetFileVersion(strUserFile) & "."

strSetUpVersion = objF.GetFileVersion(strSetUpFile) & "."

‘ Para obtener el número de campos de casa versión se utiliza la

‘ función NumberOfFields que se describirá posteriormente en el

‘ módulo VersionModify.

intNOFUser = NumberOfFields(strUserVersion)

intNOFSetUp = NumberOfFields(strSetUpVersion)

‘ Se hacen ambas versiones con el mismo número de campos, para lo

‘ que se utiliza la función IntroduceFields para introducir tantos

‘ campos de ceros como sean necesarios en la versión que menos

‘ tenga. Esta función será descrita posteriormente en el módulo

Page 176: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

168

‘ VersionVerify.

If intNOFUser <> intNOFSetUp Then

If intNOFUser < intNOFSetUp Then

IntroduceFields strUserVersion, intNOFSetUp - intNOFUser

intNOF = intNOFSetUp

Else

IntroduceFields strSetUpVersion, intNOFUser - intNOFSetUp

intNOF = intNOFUser

End If

Else

intNOF = intNOFUser

End If

‘ Una vez que ambas versiones tienen la misma longitud, se comparan

‘ campo por campo hasta que se conozca cual es el más actualizado.

For intX = 1 To intNOF

‘ Se toman ambos campos.

strUserField = TakeField(strUserVersion, intX)

strSetUpField = TakeField(strSetUpVersion, intX)

‘ Se rellena el pequeño con ceros a la izquierda.

FillWithZeros strUserField, strSetUpField

‘ Se compara el número, y si hay diferencia se sale de la función

‘ diciendo si el de la aplicación es el más actualizado o no.

If Val(strUserField) <> Val(strSetUpField) Then

If Val(strUserField) > Val(strSetUpField) Then

CheckVersion = False

Exit Function

Else

CheckVersion = True

Exit Function

End If

End If

‘ Se pasa al siguiente campo.

Next

‘ Cuando no ha habido diferencias es que ambas versiones son

Page 177: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

169

‘ iguales, en tal caso se devuelve también FALSE como si la versión

‘ del fichero que tratamos de instalar fuera menos actualizada.

CheckVersion = False

End Function

‘ El procedimiento siguiente función crea la carpeta “Satcom

‘ Discovery” para lo que primero mira si ya existe, en cuyo caso

‘ primero la borra y luego instala una nueva.

Public Sub InstallFolder()

Dim objAux As FileSystemObject

Set objAux = New FileSystemObject

‘ Chequea si ya existe la carpeta, en cuyo caso la borra.

If objAux.FolderExists(strMasterDrive & "\Program Files\Satcom

Discovery") Then objAux.DeleteFolder strMasterDrive & "\Program

Files\Satcom Discovery", True

‘ Crea la carpeta “Satcom Discovery”.

objAux.CreateFolder strMasterDrive & "\Program Files\Satcom

Discovery"

End Sub

‘ El siguiente procediento crea un acceso directo en la ubicación dada

‘ por strShortCutPath, usando el icono dado por la ruta

‘ strIconLocation y que enlaza con la aplicación dada por

‘ strTargetPath.

Public Sub CreateShortCut(ByVal strShortCutPath, ByVal strTargetPath,

ByVal strIconLocation)

Dim myShell As IWshShell

Dim myShortCut As IWshShortcut_Class

Set myShell = New IWshShell_Class

Set myShortCut = myShell.CreateShortCut(strShortCutPath)

myShortCut.TargetPath = strTargetPath

myShortCut.IconLocation = strIconLocation

myShortCut.Save

End Sub

Page 178: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

170

‘ La siguiente función devuelve la ruta del directorio de sistema de

Windows.

Public Function GetWindowsDirectory() As String

Dim strDirectory As String, lngRet As Long

‘ Crea un buffer de 255 espacios

strDirectory = Space(255)

‘ Se obtiene el directorio de Windows

lngRet = GetSystemDirectory(strDirectory, 255)

‘ Se borran los caracteres innecesarios del buffer.

strDirectory = Left$(strDirectory, lngRet)

‘ Se devuelve la ruta del directorio de sistema de Windows.

GetWindowsDirectory = strDirectory

End Function

‘ Esta función chequea si la aplicación dada por el parámetro ya

‘ existe en COM+, en cuyo caso devuelve TRUE, en caso contrario

‘ devolverá FALSE.

Public Function ApplicationExists(ByVal AppName As String) As Boolean

Dim cat As COMAdmin.COMAdminCatalog

Set cat = New COMAdmin.COMAdminCatalog

Dim apps As COMAdmin.COMAdminCatalogCollection

Set apps = cat.GetCollection("Applications")

apps.Populate

‘ Se enumeran las aplicaciones en busca de la que se pasa por

‘ parámetro.

Dim app As COMAdmin.COMAdminCatalogObject

For Each app In apps

If app.Name = AppName Then

ApplicationExists = True

Exit Function

End If

Next app

ApplicationExists = False

End Function

Page 179: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

171

‘ El siguiente procedimiento Sub borra la aplicación dada por el

‘ parámetro de entre las aplicaciones de COM+.

Public Sub DeleteApplication(ByVal AppName As String)

Dim oAdmin As New COMAdmin.COMAdminCatalog

Dim oApplications As COMAdmin.COMAdminCatalogCollection

Dim oApplication As COMAdmin.COMAdminCatalogObject

Set oApplications = oAdmin.GetCollection("Applications")

oApplications.Populate

Dim i As Integer

While i < oApplications.Count

If (oApplications.item(i).Name = AppName) Then

oApplications.Remove (i)

oApplications.SaveChanges

Exit Sub

End If

i = i + 1

Wend

End Sub

9.1.2.2 Módulo EditRegistry.

‘ Se especifica declaración explícita.

Option Explicit

‘ Ahora se declaran las APIs empleadas para las tareas de edición del

‘ registro de Windows.

‘ La siguiente es una API que no se usa directamente, sino que es

‘ empleada cuando estamos depurando la aplicación en busca de algún

‘ posible error.

Public Declare Function FormatMessage Lib "kernel32" Alias

"FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal

dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As

String, ByVal nSize As Long, Arguments As Long) As Long

Page 180: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

172

‘ La API siguiente nos permite establecer un valor en el registro.

Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias

"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String,

ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal

cbData As Long) As Long

‘ Cada vez que queramos abrir una clave utilizaremos la siguiente API.

‘ Que tras abrir la clave nos devolverá en el parámetro phkResult el

‘ enlace para tratar con dicha clave y poder editarla.

Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias

"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal

ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As

Long

‘ Cada vez que una clave es creada o abierta, al finalizar con el

‘ trato que se quiera hacer con ella, se debe cerrar, para está tarea

‘ se utiliza la siguiente API.

Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As

Long) As Long

‘ Esta API crea una nueva clave en el registro. En el caso de que ésta

‘ ya exista, se limita a abrirla. Devuelve el enlace a dicha clave con

‘ el parámetro phkResult.

Public Declare Function RegCreateKey Lib "advapi32.dll" Alias

"RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String,

phkResult As Long) As Long

‘ La siguiente es la API que la aplicación utiliza cuando está

‘ intentando leer un valor del registro. Para ello se debe utilizar

‘ dos veces, en la primera devuelve el tipo del valor y su tamaño, y

‘ en la segunda devuelve el valor pedido.

Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias

"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String,

ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As

Long) As Long

‘ La siguiente API es usada sólo en tareas de depuración y sirve para

‘ establecer el último número de error ocurrido.

Public Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As

Long)

Page 181: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

173

‘ Para el correcto funcionamiento de algunas de las APIs anteriores,

‘ se necesitan ciertas constantes que éstas usan como argumento en los

‘ casos que nos incumben. A estos valores se les suele asociar unas

‘ constantes globales para que así no haya que recordarlos. Son los

‘ siguientes.

Public Const HKEY_CURRENT_USER = &H80000001

Public Const HKEY_LOCAL_MACHINE = &H80000002

Public Const REG_MULTI_SZ = 7

Public Const REG_SZ = 1

Public Const REG_BINARY = 3

Public Const REG_DWORD As Long = 4

Public Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000

Public Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100

Public Const LANG_NEUTRAL = &H0

Public Const SUBLANG_DEFAULT = &H1

Public Const ERROR_BAD_USERNAME = 2202&

Public Const STANDARD_RIGHTS_ALL = &H1F0000

Public Const KEY_QUERY_VALUE = &H1

Public Const KEY_SET_VALUE = &H2

Public Const KEY_CREATE_SUB_KEY = &H4

Public Const KEY_ENUMERATE_SUB_KEYS = &H8

Public Const KEY_NOTIFY = &H10

Public Const KEY_CREATE_LINK = &H20

Public Const SYNCHRONIZE = &H100000

Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE

Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or

KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

‘ Ahora vemos cada uno de los procedimientos y funciones que se alojan

‘ en este módulo.

‘ El siguiente procedimiento sólo se utiliza en tareas de depuración.

‘ Muestra en pantalla el error que tuvo lugar tratando de editar el

‘ registro.

Public Sub RegDebugError(ByVal lngErrorNumber As Long)

Dim Buffer As String

‘ Se crea un buffer donde irá la descripción del error.

Buffer = Space(200)

Page 182: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

174

‘ Se establece el último número de error.

SetLastError ERROR_BAD_USERNAME

‘ Se obtiene la descripción del error.

FormatMessage FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, lngErrorNumber,

LANG_NEUTRAL, Buffer, 200, ByVal 0&

‘ Se muestra el error por pantalla.

MsgBox Buffer

End Sub

‘ El siguiente procedimiento establece un valor tipo REG_DWORD en el

‘ registro, concretamente dentro de la clave de Satcom. Se utiliza

‘ para marcar como instalados a los componentes y así poder

‘ notificarlo al usuario en la aplicación de instalación. Para ello

‘ se le pasa como parámetro el valor a almacenar y su nombre.

Public Sub SetRegistryValue(ByVal strValueName As String, ByVal

lngValue As Long)

Dim lngAux As Long

Dim ret

‘ Primero crea/abre la clave del registro.

lngAux = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Satcom", ret)

‘ Ahora establece el valor.

lngAux = RegSetValueEx(ret, strValueName, 0, REG_DWORD, lngValue,

LenB(lngValue))

‘ Finalmente, cierra la clave.

RegCloseKey ret

End Sub

‘ La siguiente función lee el contenido del valor de tipo REG_DWORD

‘ dado por parámetro en la clave de Satcom. De esta manera chequeamos

‘ si un determinado componente está instalado.

Public Function ReadRegistryValue(ByVal strValueName) As Long

Dim lngAux As Long, lngValueType As Long, lngSize As Long, lngValue

As Long

Page 183: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

175

Dim lngData As Long

Dim ret

‘ Se abre la clave de Satcom.

lngAux = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Satcom", 0&,

KEY_ALL_ACCESS, ret)

‘ si no hay error lngAux = 0. Entonces continuamos, utilzando la

‘ API RegQueryValue que como ya se comentó se debe utilizar dos

‘ veces.

If lngAux = 0 Then

lngAux = RegQueryValueEx(ret, strValueName, 0, lngValueType,

ByVal 0, lngSize)

‘ Si no hay error lngAux = 0. Entonces se continua.

If lngAux = 0 Then

lngAux = RegQueryValueEx(ret, strValueName, 0, 0, lngData,

lngSize)

‘ Si no hay error lngAux = 0. Se continua.

If lngAux = 0 Then

‘ Se devuelve el valor pedido.

ReadRegistryValue = lngData

Else

‘ En caso de error se depura.

RegDebugError (lngAux)

End If

Else

‘ En este caso el valor pedido no existe, así que se devuelve

‘ lngAux que valdrá 2.

ReadRegistryValue = lngAux

End If

Else

‘ Se depura el error.

RegDebugError (lngAux)

End If

Page 184: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

176

‘ Finalmente se cierra la clave.

RegCloseKey ret

End Function

‘ La siguiente función comprueba si la clave dada por el parámetro

‘ strKey existe o no, devolviendo TRUE en caso afirmativo. La clave se

‘ buscará o bien en la clave alta “Current User” o en “LocalMachine”,

‘ para especificar en cual de las dos buscar se utiliza el parámetro

‘ strhKey.

Public Function RegKeyExists(ByVal strhKey As String, ByVal strKey As

String) As Boolean

Dim ret As Long, lngAux As Long

‘ Primero vemos el caso en que se quiera buscar en “LocalMachine”.

If strhKey = "LocalMachine" Then

‘ Se intenta abrir la clave dada.

lngAux = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0,

KEY_ALL_ACCESS, ret)

‘ Si clave no existe ret = 0.

If ret = 0 Then

‘ Se cierra la clave y se devuelve FALSE.

RegCloseKey ret

RegKeyExists = False

Else

‘ Se cierra la clave y se devuelve TRUE.

RegCloseKey ret

RegKeyExists = True

End If

‘ Ahora procedemos igual para el caso en que se quiera buscar el

‘ “Current User”.

ElseIf strhKey = "CurrentUser" Then

‘ Se intenta abrir la clave dada.

lngAux = RegOpenKeyEx(HKEY_CURRENT_USER, strKey, 0,

KEY_ALL_ACCESS, ret)

Page 185: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

177

‘ Si la clave no existe ret = 0.

If ret = 0 Then

‘ Se cierra la clave y se devuelve FALSE.

RegCloseKey ret

RegKeyExists = False

Else

‘ Se cierra la clave y se devuelve TRUE.

RegCloseKey ret

RegKeyExists = True

End If

End If

End Function

‘ Esta función comprueba si el valor dado por parámetro existe en el

‘ registro en la clave de Satcom. En caso afirmativo devuelve TRUE,

‘ sino FALSE. Se usa para chequear si se ha instalado previamente

‘ algún componente con el propósito de auto-rellenaar algunos text

‘ boxes.

Public Function RegCheckValueExists(ByVal strValueName As String) As

Boolean

Dim lngAux As Long, lngValueType As Long, lngSize As Long

Dim ret

‘ Primero se abre la clave de Satcom.

lngAux = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Satcom", 0&,

KEY_ALL_ACCESS, ret)

‘ Ahora se comprueba si el valor existe en la clave de Satcom.

lngAux = RegQueryValueEx(ret, strValueName, 0, lngValueType, ByVal

0, lngSize)

If lngAux <> 0 Then

RegCheckValueExists = False

Else

RegCheckValueExists = True

End If

‘ Finalmente se cierra la clave.

RegCloseKey ret

End Function

Page 186: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

178

‘ Esta función devuelve en un tipo string el contenido de un valor

‘ tipo REG_SZ situado en la clave de Satcom. Es utilizada

‘ fundamentalmente para auto-rellenar text boxes con información de

‘ instalaciones previas.

Public Function RegReadStringValue(ByVal strValueName As String) As

String

Dim lngAux As Long, lngValueType As Long, lngSize As Long, lngValue

As Long

Dim lngData As Long

Dim strBuf As String, lngBufferSize As Long

Dim ret

‘ Primero se abre la clave de Satcom.

lngAux = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Satcom", 0&,

KEY_ALL_ACCESS, ret)

‘ Si no hay error lngAux = 0.

If lngAux = 0 Then

lngAux = RegQueryValueEx(ret, strValueName, 0, lngValueType,

ByVal 0, lngSize)

If lngAux = 0 Then

‘ Ahora se crea un buffer con el tamaño dado por la API

‘ anterior.

strBuf = String(lngSize, Chr$(0))

‘ Se obtiene el valor.

lngAux = RegQueryValueEx(ret, strValueName, 0, 0, ByVal strBuf,

lngSize)

If lngAux = 0 Then

‘ Se devuelve el valor.

RegReadStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0))

- 1)

Else

‘ Se depura el error.

RegDebugError (lngAux)

End If

Else

‘ En este caso no existe el valor pedido, por lo que se develve

Page 187: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

179

‘ lngAux que valdrá 2.

RegReadStringValue = lngAux

End If

Else

‘ Se depura el error.

RegDebugError (lngAux)

End If

‘ Finalmente, se cierra la clave.

RegCloseKey ret

End Function

‘ El siguiente procedimiento Sub introduce un valor tipo REG_SZ ( que

‘ nos permite almacenar un dato tipo string)en la clave de Satcom. Se

‘ utiliza para almacenar información dada por el usuario de la

‘ aplicación para que se auto-rellene en lo sucesivo.

Public Sub SetRegistryStringValue(ByVal strValueName As String, ByVal

strValue As String)

Dim lngAux As Long

Dim ret

‘ Primero se crea/abre la clave de Satcom.

lngAux = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Satcom", ret)

‘ Se almacena el valor.

lngAux = RegSetValueEx(ret, strValueName, 0, REG_SZ, ByVal strValue,

Len(strValue))

‘ Se cierra la clave.

RegCloseKey ret

End Sub

9.1.2.3 Módulo EncrypFile.

‘ Se especifica declaración explícita.

Option Explicit

Page 188: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

180

‘ El siguiente procedimiento Sub desencripta el fichero cuya ruta

‘ marca el parámetro EncrypFile y deposita la información

‘ desencriptada en el fichero marcado por la ruta dada por el

‘ parámetro Finalfile. Para llevar a cabo el desencriptado, se utiliza

‘ una clave dada por el parámetro strKey.

Sub Unencryp_File(ByVal EncrypFile As String, ByVal FinalFile As

String, ByVal strKey As String)

Dim EncrypFileNumber As Integer

Dim FinalFileNumber As Integer, counter As Integer

Dim Line As String, Line_Enc As String, strTemp As String

Dim strRubbish As String, strC As String * 1

Dim c As String * 1, test As Long

Dim EndLine As Boolean, flag As Boolean

‘ Primero se abre el fichero encriptado.

EncrypFileNumber = FreeFile

Open EncrypFile For Random As #EncrypFileNumber Len = 1

‘ Ahora se abre el fichero donde se pondrá la información

‘ desencriptada.

FinalFileNumber = FreeFile

Open FinalFile For Binary As #FinalFileNumber Len = 1

‘ Empieza el desencriptado del fichero, para lo que se recorre cada

‘ uno de los caracteres que lo componen y se “traducen” utilizando

‘ la función UnEncrypter.

While Not EOF(EncrypFileNumber)

Get #EncrypFileNumber, , strC

If Not (EOF(EncrypFileNumber)) Then Put #FinalFileNumber, ,

UnEncrypter(strC, strKey)

Wend

‘ Finalmente se cierran ambos ficheros.

Close #FinalFileNumber

Close #EncrypFileNumber

End Sub

Page 189: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

181

‘ La siguiente función desencripta el dato tipo string dado en el

‘ parámetro strC usando la clave dada por el parámetro strKey. Aunque

‘ se usa haciendo una transcripción carácter a carácter.

Public Function UnEncrypter(ByVal strC As String, ByVal strKey As

String) As String

Dim intX As Integer

Dim strCharacter As String

‘ Se lleva a cabo el encriptado.

For intX = 1 To Len(strKey)

strCharacter = Chr(Asc(strC) Xor Asc(Mid(strKey, (intX Mod

Len(strKey) + 1))) Xor (intX Mod 256))

Next

‘ Se devuelve el valor desencriptado.

UnEncrypter = strCharacter

End Function

9.1.2.4 Módulo Reboot.

‘ Se especifica declaración explicita.

Option Explicit

‘ Se decraran las constantes necesarias para el uso de las APIs.

Private Const EWX_LOGOFF = 0

Private Const EWX_SHUTDOWN = 1

Private Const EWX_REBOOT = 2

Private Const EWX_FORCE = 4

Private Const TOKEN_ADJUST_PRIVILEGES = &H20

Private Const TOKEN_QUERY = &H8

Private Const SE_PRIVILEGE_ENABLED = &H2

Private Const ANYSIZE_ARRAY = 1

Private Const VER_PLATFORM_WIN32_NT = 2

‘ Se crean las estructuras de datos necesarias.

Type OSVERSIONINFO

dwOSVersionInfoSize As Long

dwMajorVersion As Long

Page 190: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

182

dwMinorVersion As Long

dwBuildNumber As Long

dwPlatformId As Long

szCSDVersion As String * 128

End Type

Type LUID

LowPart As Long

HighPart As Long

End Type

Type LUID_AND_ATTRIBUTES

pLuid As LUID

Attributes As Long

End Type

Type TOKEN_PRIVILEGES

PrivilegeCount As Long

Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES

End Type

‘ Se declaran las APIs.

‘ Devuelve un enlace (handle) al proceso.

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function OpenProcessToken Lib "advapi32" (ByVal

ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As

Long) As Long

‘ La siguiente API devuelve el identificador LUID que representa al

‘ privilegio en cuestión.

Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias

"LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As

String, lpLuid As LUID) As Long

‘ La siguiente API habilita o deshabilita el privilegio dado por el

‘ parámetro TokenHandle.

Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal

TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As

TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As

TOKEN_PRIVILEGES, ReturnLength As Long) As Long

‘ La siguiente API permite reiniciar el equipo.

Page 191: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

183

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As

Long, ByVal dwReserved As Long) As Long

‘ La siguiente API obtiene información sobre el sistema.

Private Declare Function GetVersionEx Lib "kernel32" Alias

"GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long

‘ La siguiente función detecta si el sistema funciona bajo Windows NT.

Public Function IsWinNT() As Boolean

Dim myOS As OSVERSIONINFO

myOS.dwOSVersionInfoSize = Len(myOS)

GetVersionEx myOS

IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)

End Function

‘ Establece el privilegio de reinicio para la aplicación de

‘ instalación.

Private Sub EnableShutDown()

Dim hProc As Long

Dim hToken As Long

Dim mLUID As LUID

Dim mPriv As TOKEN_PRIVILEGES

Dim mNewPriv As TOKEN_PRIVILEGES

hProc = GetCurrentProcess()

OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY,

hToken

LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID

mPriv.PrivilegeCount = 1

mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED

mPriv.Privileges(0).pLuid = fluid

‘ Se habilita el privilegio de reinicio para la actual aplicación.

AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 *

mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)

End Sub

‘ El siguiente procedimiento reinicia el sistema.

Public Sub RebootNT(Force As Boolean)

Dim ret As Long

Page 192: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

184

Dim Flags As Long

Flags = EWX_REBOOT

If Force Then Flags = Flags + EWX_FORCE

If IsWinNT Then EnableShutDown

ExitWindowsEx Flags, 0

End Sub

9.1.2.5 Módulo SerialNumber.

‘ Se especifica declaración explítica.

Option Explicit

‘ Se declara la siguiente variable global que nos almacenará el número

‘ de veces que el cliente ha intentado teclear un código de desbloqueo

‘ correcto.

Public intCounter As Integer

‘ La siguiente constante global nos especifica una clave en

‘ hexadecimal que será usada a la hora de crear un código de

‘ desbloqueo.

Public Const strSatcomKey = "12345678909876543210"

‘ Ahora se declara la API que devuelve un número único, en concreto el

‘ número de formateo del master drive.

Declare Function GetVolumeInformation Lib "kernel32" Alias

"GetVolumeInformationA" (ByVal lpRootPathName As String, _

ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,

lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,

lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _

ByVal nFileSystemNameSize As Long) As Long

‘ La siguiente función devuelve el número de formato del disco dado

‘ por parámetro. Para ello usa la API GetVolumeInformation.

Public Function DriveSerialNumber(ByVal strDrive As String) As Long

Dim LongSerialNumber As Long, strCad1 As String, strCad2 As String

strCad1 = String(255, vbNullChar)

strCad2 = String(255, vbNullChar)

GetVolumeInformation strDrive, strCad1, Len(strCad1),

Page 193: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

185

LongSerialNumber, 0, 0, strCad2, Len(strCad2)

DriveSerialNumber = LongSerialNumber

End Function

‘ La siguiente función genera un número aleatorio hexadecimal

encriptado con el último carácter del número de formato.

Public Function RandomHex(ByVal strSerial) As String

Dim intX As Integer

intX = Int((15 * Rnd) + 1)

RandomHex = Hex(intX Xor CInt(Val("&H" & Right(strSerial, 1))))

End Function

‘ La siguiente función genera el código del producto a partir del

‘ número de formato del master drive. El código creado tendrá una

‘ longitud de 44 caracteres y se generará dividiendo esa longitud en

‘ varios bloques funcionales.

Public Function GetPreKey(ByVal strDrivePath As String) As String

Dim strHexSerialNumber As String, strDisplaySN As String

Dim LongSerialNumber As Long, intPadding As Integer, intX As

Integer

Dim strTemp As String, strRandomXOR As String, intReverseIndex As

Integer

‘ Primero obtenemos el número de serie del formato del master drive.

LongSerialNumber = DriveSerialNumber(strDrivePath)

strHexSerialNumber = Hex(LongSerialNumber)

intPadding = 20 - Len(strHexSerialNumber)

‘ La variable strDisplaySN será donde iremos colocando el código de

‘ producto.

strDisplaySN = ""

strRandomXOR = RandomHex(strHexSerialNumber)

‘ Se crea la cadena strTemp aleatoriamente a partir de

‘ strHexSerialNumber.

For intX = 1 To Len(strHexSerialNumber)

strTemp = strTemp & Hex(CInt(Val("&H" & Mid(strHexSerialNumber,

intX, 1))) Xor CInt(Val("&H" & strRandomXOR)))

Page 194: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

186

Next

‘ A partir de ahora se va construyendo el código de producto

‘ (strDisplaySN).

‘ Primer trozo, primera parte (4 caracteres)

strDisplaySN = strDisplaySN & RandomHex(strHexSerialNumber) &

RandomHex(strHexSerialNumber) & strRandomXOR &

RandomHex(strHexSerialNumber)

‘ Longitud de la mitad de la cadena más uno y más uno si la

‘ longitud es impar.

intReverseIndex = ((Int(Len(strTemp) / 2)) + (Len(strTemp) Mod 2))

+ 1

‘ Se le añade al código la cadena strTemp del revés.

For intX = 1 To (intReverseIndex - 1)

strDisplaySN = strDisplaySN & Mid(strTemp, intReverseIndex - intX,

1)

Next

‘ Primer trozo, segunda parte. Se rellena el trozo hasta alcanzar

‘ los 20 caracteres.

For intX = 1 To intPadding

strDisplaySN = strDisplaySN & RandomHex(strHexSerialNumber)

Next

‘ Primer trozo, tercera parte.(24 caractereres)

intReverseIndex = Len(strTemp) - ((Int(Len(strTemp) / 2))) -

(Len(strTemp) Mod 2)

For intX = 1 To intReverseIndex

strDisplaySN = strDisplaySN & Mid(strTemp, Len(strTemp) + 1 -

intX, 1)

Next

‘ Segundo trozo.

‘ Ahora se añaden 15 caracteres sin importancia y uno con la XORKey,

‘ este último en la posición dada por el tercer carácter de

‘ strDisplaySN.

Page 195: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

187

For intX = 1 To 16

If intX = CInt(Val("&H" & Mid(strDisplaySN, 3, 1))) Then

strDisplaySN = strDisplaySN & strRandomXOR

Else

strDisplaySN = strDisplaySN & RandomHex(strHexSerialNumber)

End If

Next

‘ tercer trozo.

‘ Ahora un carácter sin importancia, y luego la longitud del número

‘ de serie encriptado con un XOR a strRandomXOR. Tras lo que se

‘ añaden 2 caracteres más sin importancia.

strDisplaySN = strDisplaySN & RandomHex(strHexSerialNumber) &

Hex(Len(strTemp) Xor CInt(Val("&H" & strRandomXOR)))

strDisplaySN = strDisplaySN & RandomHex(strHexSerialNumber) &

RandomHex(strHexSerialNumber)

‘ Se devuelve el código de producto (44 caracteres)

GetPreKey = strDisplaySN

End Function

‘ Esta función genera el código de desbloqueo, para lo que hace un XOR

‘ entre el código de producto dado por el parámetro strPreKey y sus

‘ caracteres número 2 y 41. Luego hace un XOR con la clave de Satcom

‘ dada por el parámetro strHexSatcomKey.

Public Function GetProductKey(ByVal strPrekey As String, ByVal

strHexSatcomKey As String) As String

Dim strAux As String

Dim strProductKey1 As String, intX As Integer

Dim strProductKey2 As String, strProductKey As String

Dim intY As Integer

Dim strProductKey3 As String

strProductKey1 = ""

strProductKey2 = ""

strProductKey = ""

Page 196: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

188

strAux = ""

‘ Se hace el XOR con el carácter número 41.

For intX = 1 To 44

strProductKey1 = strProductKey1 & Hex(CInt(Val("&H" &

Mid(strPrekey, intX, 1))) Xor CInt(Val("&H" & Mid(strPrekey, 41,

1))))

Next

‘ Para evitar un XOR entre dos caracteres iguales.

If Mid(strPrekey, 41, 1) = Mid(strPrekey, 2, 1) Then

If Mid(strPrekey, 41, 1) <> "B" Then

strAux = "B"

Else

strAux = "C"

End If

Else

strAux = Mid(strPrekey, 2, 1)

End If

‘ Se hace el XOR con el carácter número 2.

For intX = 1 To 44

strProductKey2 = strProductKey2 & Hex(CInt(Val("&H" &

Mid(strProductKey1, intX, 1))) Xor CInt(Val("&H" & strAux)))

Next

‘ Ahora se hace el XOR con la clave de Satcom

For intY = 1 To 44

strProductKey3 = strProductKey3 & Hex(CInt(Val("&H" &

Mid(strProductKey2, intY, 1))) Xor CInt(Val("&H" &

Mid(strHexSatcomKey, intX, 1))))

Next

strProductKey = strProductKey3

strProductKey3 = ""

‘ Ahora el resto.

For intX = 1 To Len(strHexSatcomKey)

For intY = 1 To 44

Page 197: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

189

strProductKey3 = strProductKey3 & Hex(CInt(Val("&H" &

Mid(strProductKey, intY, 1))) Xor CInt(Val("&H" &

Mid(strHexSatcomKey, intX, 1))))

Next

strProductKey = strProductKey3

strProductKey3 = ""

Next

‘ Se devuelve el código de desbloqueo.

GetProductKey = strProductKey

End Function

9.1.2.6 Módulo VersionVerify.

‘ Se especifica declaración explícita.

Option Explicit

‘ La siguiente función devuelve el número de campos que tiene la

‘ versión dada por parámetro.

Public Function NumberOfFields(ByVal strString As String) As Integer

Dim intX As Integer

Dim intCounter As Integer

‘ La siguiente variable almacenará el número de campos.

intCounter = 0

For intX = 1 To Len(strString)

If Mid(strString, intX, 1) = "." Then intCounter = intCounter + 1

Next

NumberOfFields = intCounter

End Function

‘ La siguiente función devuelve el campo dado por el número

‘ intFieldNumber de la versión dada por el parámetro strString.

Page 198: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

190

Public Function TakeField(ByVal strString As String, ByVal

intFieldNumber As Integer) As String

Dim intX As Integer

Dim intCounter As Integer

Dim strTemp As String

strTemp = ""

intX = 1

intCounter = 1

‘ Nos situamos al principio del campo pedido.

While (intCounter < intFieldNumber)

If Mid(strString, intX, 1) = "." Then intCounter = intCounter + 1

intX = intX + 1

Wend

‘ Ahora se obtiene el campo pedido.

While Mid(strString, intX, 1) <> "."

strTemp = strTemp & Mid(strString, intX, 1)

intX = intX + 1

Wend

‘ Se devuelve el campo pedido.

TakeField = strTemp

End Function

‘ El siguiente procedimiento obtiene dos campos a través de sus

‘ parámetros, tras lo que iguala sus longitudes rellenando con ceros a

‘ la izquierda el más corto. Estos campos son pasados como parámetros,

‘ pero por referencia, por lo que estos se verán modificados por las

‘ acciones del procedimiento.

Public Sub FillWithZeros(ByRef strOne As String, ByRef strTwo As

String)

Dim intX As Integer, intDiff As Integer

Dim intLen1 As Integer, intLen2 As Integer

Dim strTemp As String

strTemp = ""

intLen1 = Len(strOne)

Page 199: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

191

intLen2 = Len(strTwo)

intDiff = Abs(intLen1 - intLen2)

If intLen1 <> intLen2 Then

If intLen1 < intLen2 Then

For intX = 1 To intDiff

strTemp = strTemp & "0"

Next

strTemp = strTemp & strOne

strOne = strTemp

Else

For intX = 1 To intDiff

strTemp = strTemp & "0"

Next

strTemp = strTemp & strTwo

strTwo = strTemp

End If

End If

End Sub

‘ El siguiente procedimiento Sub introduce tantos campos extras en la

‘ versión dada por el parámetro strVersion como indica el otro

‘ parámetro intNumberOfFields). La versión se pasa por referencia, por

‘ lo que el cambio acometido en este procedimiento se verá reflejado

‘ en la versión al terminar el procedimiento.

Public Sub IntroduceFields(ByRef strVersion, ByVal intNumberOfFields)

Dim intX As Integer

For intX = 1 To intNumberOfFields

strVersion = strVersion & "0."

Next

End Sub

9.1.2.7 Módulo de Clase IISVirtualDirectory.

‘ Se especifica declaración explícita.

Page 200: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

192

Option Explicit

‘ Se declaran las variablesglobales que se utilizan.

Private mstrVirtualDirectoryName As String

Private mstrPhysicalDirectoryName As String

Private mstrApplicationOwner As String

Private mstrLastError As String

Private mboolAllowScriptsToRun As Boolean

Private mboolRunApplicationInProcess As Boolean

‘ Se declaran las constantes globales.

Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10

Private Const INVALID_HANDLE_VALUE = -1

Private Const MAX_PATH = 260

‘ Se declaran las estructuras utilizadas.

Private Type FILETIME

dwLowDateTime As Long

dwHighDateTime As Long

End Type

Private Type WIN32_FIND_DATA

dwFileAttributes As Long

ftCreationTime As FILETIME

ftLastAccessTime As FILETIME

ftLastWriteTime As FILETIME

nFileSizeHigh As Long

nFileSizeLow As Long

dwReserved0 As Long

dwReserved1 As Long

cFileName As String * MAX_PATH

cAlternate As String * 14

End Type

Private Type SECURITY_ATTRIBUTES

nLength As Long

lpSecurityDescriptor As Long

bInheritHandle As Long

End Type

‘ Declaramos las APIs.

Page 201: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

193

Private Declare Function CreateDirectory Lib "kernel32" Alias

"CreateDirectoryA" (ByVal lpPathName As String,

lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long

Private Declare Function CopyFile Lib "kernel32"Alias "CopyFileA"

(ByVal lpExistingFileName As String,ByVal lpNewFileName As String,

ByVal bFailIfExists As Long) As Long

Private Declare Function FindFirstFile Lib "kernel32" Alias

"FindFirstFileA" (ByVal lpFileName As String,lpFindFileData As

WIN32_FIND_DATA) As Long

Private Declare Function FindNextFile Lib "kernel32" Alias

"FindNextFileA" (ByVal hFindFile As Long,lpFindFileData As

WIN32_FIND_DATA) As Long

Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As

Long) As Long

Private Declare Function GetComputerName Lib "kernel32" Alias

"GetComputerNameA" (ByVal lpBuffer As String,nSize As Long) As Long

Private Declare Function lstrlenW Lib "kernel32"(ByVal lpString As

Long) As Long

‘ Se declara la constante necesaria para las APIs.

Private Const MAX_COMPUTERNAME As Long = 15

‘ Se declaran las propiedades del objeto.

Public Property Get RunApplicationInProcess() As Boolean

RunApplicationInProcess = mboolRunApplicationInProcess

End Property

Public Property Let RunApplicationInProcess(ByVal

boolRunApplicationInProcess As Boolean)

mboolRunApplicationInProcess = boolRunApplicationInProcess

End Property

Public Property Get AllowScriptsToRun() As Boolean

AllowScriptsToRun = mboolAllowScriptsToRun

End Property

Page 202: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

194

Public Property Let AllowScriptsToRun(ByVal boolAllowScriptsToRun As

Boolean)

mboolAllowScriptsToRun = boolAllowScriptsToRun

End Property

Public Property Get LastError() As String

LastError = mstrLastError

End Property

Public Property Let LastError(ByVal strLastError As String)

mstrLastError = strLastError

End Property

Public Property Get ApplicationOwner() As String

ApplicationOwner = mstrApplicationOwner

End Property

Public Property Let ApplicationOwner(ByVal strOwner As String)

mstrApplicationOwner = strOwner

End Property

Public Property Get PhysicalDirectoryName() As String

PhysicalDirectoryName = mstrPhysicalDirectoryName

End Property

Public Property Let PhysicalDirectoryName(ByVal

strPhysicalDirectoryName As String)

mstrPhysicalDirectoryName = strPhysicalDirectoryName

End Property

Public Property Get VirtualDirectoryName() As String

VirtualDirectoryName = mstrVirtualDirectoryName

End Property

Public Property Let VirtualDirectoryName(ByVal strVirtualDirectoryName

As String)

mstrVirtualDirectoryName = strVirtualDirectoryName

End Property

‘ Se declaran las funciones y procedimientos.

Page 203: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

195

‘ Crea directorios anidados en el disco.

Private Function CreateNestedFoldersByPath(ByVal

completeDirectory As String) As Integer

Dim r As Long

Dim SA As SECURITY_ATTRIBUTES

Dim drivePart As String

Dim newDirectory As String

Dim item As String

Dim sfolders() As String

Dim pos As Integer

Dim x As Integer

‘ Debe tener un carácter “\” para la siguiente rutina.

If Right$(completeDirectory, 1) <> "\" Then

completeDirectory = completeDirectory & "\"

End If

pos = InStr(completeDirectory, ":")

If pos Then

drivePart = GetPart(completeDirectory, "\")

Else: drivePart = ""

End If

Do Until completeDirectory = ""

item = GetPart(completeDirectory, "\")

ReDim Preserve sfolders(0 To x) As String

If x = 0 Then item = drivePart & item

sfolders(x) = item

x = x + 1

Loop

‘ Ahora crea los directorios.

x = -1

Do

x = x + 1

SA.nLength = LenB(SA)

Call CreateDirectory(newDirectory, SA)

Loop Until x = UBound(sfolders)

Page 204: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

196

CreateNestedFoldersByPath = x + 1

End Function

‘ Esta función separa un string por el parámetro delimiter, aisla una

‘ parte y acórta la cadena para que la siguiente parte este preparada

‘ para borrarse.

Private Function GetPart(startStrg As String, delimiter As String) As

String

Dim c As Integer

Dim item As String

c = 1

Do

If Mid$(startStrg, c, 1) = delimiter Then

item = Mid$(startStrg, 1, c)

startStrg = Mid$(startStrg, c + 1, Len(startStrg))

GetPart = item

Exit Function

End If

c = c + 1

Loop

End Function

‘ Esta es la función principal del módulo y en donde se introducen los

‘ cambios necesarios para establecer nuestra configuración.

Public Function Create() As Boolean

Dim objIIS As Object

Dim objVirtualDirectory As Object

Dim strACLCommand As String

On Error GoTo errHandle

On Error Resume Next

Set objIIS = GetObject("IIS://localhost/W3SVC/1/Root/" &

mstrVirtualDirectoryName)

If Err.Number = 0 Then

mstrLastError = "An application with this name already exists"

Page 205: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

197

‘ Aquí introducimos que si el directorio virtual ya existe, que

‘ se borre.

Set objIIS = GetObject("IIS://localhost/W3SVC/1/Root")

Set objVirtualDirectory = objIIS.Delete("IISWebVirtualDir",

mstrVirtualDirectoryName)

End If

Set objIIS = Nothing

On Error GoTo 0

‘ Se crea la aplicación IIS.

Set objIIS = GetObject("IIS://localhost/W3SVC/1/Root")

‘ Se testea para ver si la carpeta existe en el sistema de ficheros,

‘ sino se crea.

If Not FolderExists(mstrPhysicalDirectoryName) Then

CreateNestedFoldersByPath mstrPhysicalDirectoryName

End If

‘ Crea la carpeta en el sistema de archivos.

Set objVirtualDirectory = objIIS.Create("IISWebVirtualDir",

mstrVirtualDirectoryName)

objVirtualDirectory.AccessScript = IIf(mboolAllowScriptsToRun,

"True", "False") 'bolScriptPermissions

objVirtualDirectory.path = mstrPhysicalDirectoryName

‘ Aquí introducimos nuestros requisitos de configuración.

objVirtualDirectory.AspScriptTimeout = 900

objVirtualDirectory.AspSessionTimeout = 10080

objVirtualDirectory.SetInfo

objVirtualDirectory.AppCreate mboolRunApplicationInProcess

strACLCommand = "cmd /c echo y| CACLS "

strACLCommand = strACLCommand & mstrPhysicalDirectoryName

strACLCommand = strACLCommand & " /E /G " & mstrApplicationOwner &

":C"

Page 206: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

198

Shell strACLCommand, vbHide

Create = True

exitPoint:

Set objVirtualDirectory = Nothing

Exit Function

errHandle:

mstrLastError = "Unexpected error occured in

CreateVirtualDirectory" & vbCrLf & GetVBError()

GoTo exitPoint

End Function

‘ Ahora se declaran otras funciones de las que hace uso la función

‘ Create tanto directa como indirectamente.

Private Function GetVBError() As String

Dim szMsg As String

szMsg = "Error # : " & Err.Number

szMsg = szMsg & vbTab & "Description : " & Err.Description

szMsg = szMsg & vbTab & "Source : " & Err.Source

If Err.LastDllError <> 0 Then

szMsg = szMsg & vbTab & "DLL Error : " & Err.LastDllError

End If

GetVBError = szMsg

End Function

‘ Esta función comprueba si la carpeta existe.

Private Function FolderExists(ByVal sFolder As String) As Boolean

Dim hFile As Long

Dim WFD As WIN32_FIND_DATA

‘ Borra el carácter “\”.

sFolder = UnQualifyPath(sFolder)

‘ Llama a la API pasandole la carpeta.

hFile = FindFirstFile(sFolder, WFD)

Page 207: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE INSTALACIÓN

199

‘ Se mira si la carpeta existe.

FolderExists = (hFile <> INVALID_HANDLE_VALUE) And _

(WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY)

Call FindClose(hFile)

End Function

Private Function UnQualifyPath(ByVal sFolder As String) As String

sFolder = Trim$(sFolder)

If Right$(sFolder, 1) = "\" Then

UnQualifyPath = Left$(sFolder, Len(sFolder) - 1)

Else: UnQualifyPath = sFolder

End If

End Function

Private Sub Class_Initialize()

mboolRunApplicationInProcess = True

mboolAllowScriptsToRun = True

mstrApplicationOwner = "IUSR_" & GetLocalComputerName()

End Sub

‘ La siguiente función devuelve el nombre del ordenador.

Private Function GetLocalComputerName() As String

Dim tmp As String

‘ Devuelve el nombre del ordenador.

tmp = Space$(MAX_COMPUTERNAME)

If GetComputerName(tmp, Len(tmp)) <> 0 Then

GetLocalComputerName = TrimNull(tmp)

End If

End Function

‘ Recorta la cadena

Private Function TrimNull(startstr As String) As String

TrimNull = Left$(startstr, lstrlenW(StrPtr(startstr)))

End Function

Page 208: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE ENCRIPTACIÓN

200

9.2 Código de la Aplicación de Encriptación.

En este anexo se incluirá todo el código desarrollado en la Aplicación de

Encriptación, la cual consta de un formulario y de un módulo.

Este código esta debidamente comentado para que su lectura y su

seguimiento pueda ser entendida sin mucha dificultad. Para lo que los

comentarios se han introducido siguiendo la nomenclatura particular de Visual

Basic. Esto es, se considera un comentario todo aquello que vaya precedido

en su línea por el carácter “ ‘ “. Aun así, para que no haya posibilidad de

confusión, los comentarios aparecerán con letra cursiva.

9.2.1 Formulario frmEncrypt.

‘ Se especifica declaración explícita.

Option Explicit

‘ El siguiente código gestiona el botón “Encryp”, y lo que hace es

‘ llamar al procedimiento Enc_File para que encripte el fichero

‘ elegido por el usuario y que el resultado lo ponga en la ruta pasada

‘ como segundo parámetro (también elegida por el usuario). Por último,

‘ se le pasa como tercer parámetro la clave utilizada para la

‘ encriptación.

Private Sub cmdEncryp_Click()

‘ Llama al procedimiento para que encripte el fichero.

Call Enc_File(Text1.Text, Text2.Text, "aaaaaaaaaaaaaaaaa")

‘ Muestra el mensaje indicando que se ha realizado la encriptación.

MsgBox "DONE!!!!!"

End Sub

‘ El siguiente procedimiento Sub se ejecuta cuando el usuario pulsa

‘ sobre el botón “Unencryp”. Entonces, llama al procedimiento

‘ Unencryp_File (definido en el módulo) y le pasa como parámetros la

Page 209: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE ENCRIPTACIÓN

201

‘ ruta del fichero encriptado, la ruta donde se quieren el

‘ desencriptado y la clave utilizada en la encriptación.

Private Sub cmdUnencryp_Click()

‘ Se llama al procedimiento para desencriptar.

Call Unencryp_File(Text2.Text, Text3.Text, "aaaaaaaaaaaaaaaaa")

‘ Se muestra el mensaje indicando que la desencriptación ha

‘ terminado.

MsgBox "DONE!!!!!"

End Sub

9.2.2 Módulo EncrypModule.

‘ Se especifica declaración explícita.

Option Explicit

‘ El siguiente procedimiento Sub encripta el fichero dado por el

‘ primer parámetro y lo guarda en la ruta dada por el segundo

‘ parámetro. Para ello utiliza la clave dada por el tercer parámetro.

‘ Para realizar la encriptación, hará uso de la función Encryp, que se

‘ estudiará posteriormente.

Sub Enc_File(ByVal OriginFile As String, ByVal DestinationFile As

String, ByVal Key As String)

Dim FileOriginNumber As Integer, FileDestinationNumber As Integer

Dim strC As String * 1, intx As Long

‘ Se abren los ficheros.

FileOriginNumber = FreeFile

Open OriginFile For Binary As #FileOriginNumber Len = 1

FileDestinationNumber = FreeFile

Open DestinationFile For Binary As #FileDestinationNumber Len = 1

‘ Se realiza la encriptación.

While Not EOF(FileOriginNumber)

Get #FileOriginNumber, , strC

If Not (EOF(FileOriginNumber)) Then Put #FileDestinationNumber, ,

Page 210: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE ENCRIPTACIÓN

202

Encrypter(Key, strC)

Wend

‘ Se cierran los ficheros.

Close #FileOriginNumber

Close #FileDestinationNumber

End Sub

‘ La siguiente función encripta la cadena dada por el segundo

‘ parámetro utilizando para ello la clave dada por el primero.

Public Function Encrypter(ByVal strKey As String, ByVal strC As String)

As String

Dim intx As Integer, strCharacterAux As String, strCharacter As

String

Dim strAux As String

‘ Se realiaza la encriptación.

For intx = 1 To Len(strKey)

strCharacter = Chr(Asc(strC) Xor Asc(Mid(strKey, (intx Mod

Len(strKey) + 1))) Xor (intx Mod 256))

Next

‘ Se devuelve el carácter encriptado.

Encrypter = strCharacter

End Function

‘ El siguiente procedimiento Sub se encarga de liderar la

‘ desencriptación del fichero dado por el primer parámetro y

‘ almacenarlo en el fichero dado por el segundo parámetro. Para ello

‘ utiliza la clave dada por el tercer parámetro. Hace uso de la

‘ función Unencrip, que se describirá posteriormente.

Sub Unencryp_File(ByVal EncrypFile As String, ByVal FinalFile As

String, ByVal strKey As String)

Dim EncrypFileNumber As Integer

Dim FinalFileNumber As Integer, counter As Integer

Dim Line As String, Line_Enc As String, strTemp As String

Dim strRubbish As String, strC As String * 1

Dim c As String * 1, test As Long

Dim EndLine As Boolean, flag As Boolean

Page 211: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DE ENCRIPTACIÓN

203

‘ Se abre el fichero encriptado.

EncrypFileNumber = FreeFile

Open EncrypFile For Random As #EncrypFileNumber Len = 1

‘ Se abre el fichero destino (desencriptado).

FinalFileNumber = FreeFile

Open FinalFile For Binary As #FinalFileNumber Len = 1

‘ Ahora se comienza con la desencriptación.

While Not EOF(EncrypFileNumber)

Get #EncrypFileNumber, , strC

If Not (EOF(EncrypFileNumber)) Then Put #FinalFileNumber, ,

UnEncrypter(strC, strKey)

Wend

‘ Se cierran los ficheros.

Close #FinalFileNumber

Close #EncrypFileNumber

End Sub

‘ Esta función devuelve el desencriptado de la cadena dada por el

‘ primer parámetro utilizando la clave dada por el segundo parámetro.

Public Function UnEncrypter(ByVal strC As String, ByVal strKey As

String) As String

Dim intx As Integer

Dim strCharacter As String

For intx = 1 To Len(strKey)

strCharacter = Chr(Asc(strC) Xor Asc(Mid(strKey, (intx Mod

Len(strKey) + 1))) Xor (intx Mod 256))

Next

‘ Se devuelve el carácter desencriptado.

UnEncrypter = strCharacter

End Function

Page 212: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: CÓDIGO DE LA APLICACIÓN DEL CÓDIGO DE DESBLOQUEO

204

9.3 Código de la Aplicación del Código de Desbloqueo.

En este anexo se incluirá todo el código desarrollado en la Aplicación del

Código de Desbloqueo, la cual consta de un formulario y de un módulo.

En este caso el módulo no difiere del ya explicado en el módulo Serial

Number, visto en el anexo 9.1.2.5, por lo que no se volverá a mostrar.

Este código esta debidamente comentado para que su lectura y su

seguimiento pueda ser entendida sin mucha dificultad. Para lo que los

comentarios se han introducido siguiendo la nomenclatura particular de Visual

Basic. Esto es, se considera un comentario todo aquello que vaya precedido

en su línea por el carácter “ ‘ “. Aun así, para que no haya posibilidad de

confusión, los comentarios aparecerán con letra cursiva.

9.3.1 Formulario frmProductKeyMaker.

‘ Se especifica declaración explícita.

Option Explicit

‘ El procedimiento Sub siguiente gestiona el funcionamiento del botón

‘ para generar el código de desbloqueo. Para ello se utiliza la

‘ función GetProductKey ubicada en el módulo.

Private Sub cmdGetProductKey_Click()

txtProductKey.Text = GetProductKey(txtPrekey.Text, txtKey.Text)

End Sub

Page 213: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: TRANSACT-SQL Y OSQL/ISQL

205

9.4 TRANSACT-SQL y OSQL/ISQL.

Microsoft SQL Server y su versión reducida MSDE, vienen dotados de un

lenguaje de programación y de consulta propio a través del que se pueden

crear funciones y procedimientos adecuados para el manejo de la información

almacenada en la base de datos. Este lenguaje de programación es el

Transact-SQL.

SQL es un juego de comandos que nos permite especificar la información

que queremos recuperar o modificar. Con Transact-SQL, podemos acceder a

los datos y consultar, actualizar y administrar un sistema de base de datos

relacional.

Existen estándares para SQL definidos por el Instituto Nacional Americano

de Normalización (ANSI) y la Organización Internacional de Normalización (ISO)

y el lenguaje Transact-SQL los soporta.

La utilidad OSQL/ISQL nos permite ejecutar consultas o archivos de

comandos Transact-SQL desde el símbolo del sistema. Para ello utiliza la

conectividad abierta de bases de datos (ODBC) para comunicar con el servidor.

La utilidad se inicia directamente desde el sistema operativo con la opción de

distinguir mayúsculas de minúsculas. Después de iniciarse, OSQL/ISQL acepta

comandos Transact-SQL y los envía interactivamente a SQL Server o MSDE.

Los resultados de tales operaciones son formateados y mostrados por pantalla.

La utilidad ISQL es similar a la OSQL pero más antigua, el motivo de su uso

es que puede que el cliente disponga de un sistema de base de datos SQL

antiguo. Aun así, en general es aconsejable el uso de OSQL en vez de ISQL,

aunque para el uso que le damos en nuestra aplicación no presenta ninguna

ventaja.

La sintaxis de los comandos OSQL e ISQL es similar, con lo que se

especificará en este anexo sólo la de OSQL, que es la siguiente:

Page 214: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: TRANSACT-SQL Y OSQL/ISQL

206

- Sintaxis:

osql -U login_id [-e] [-E] [-p] [-n] [-d db_name] [-Q "query"] [-q "query"]

[-c cmd_end] [-h headers] [-w column_width] [-s col_separator]

[-t time_out] [-m error_level] [-I] [-L] [-?] [-r {0 | 1}]

[-H wksta_name] [-P password] [-R]

[-S server_name] [-i input_file] [-o output_file] [-u] [-a packet_size]

[-b] [-O] [-l time_out]

- Argumentos:

-U login_id

Es el identificador de usuario. Se distingue entre mayúsculas y minúsculas.

-e

Se activa el “eco”.

-E

Se usa una conexión de confianza en vez de requerir alguna contraseña.

-p

Se imprimen estadísticas del proceso.

-n

Se elimina la numeración y el prompt del sistema (>) de las líneas de

entrada.

-d db_name

Se emite una sentencia db_nombre cuando osql es iniciado.

-Q "query"

Ejecuta una consulta e inmediatamente después sale de osql.

-q "query"

Ejecuta una consulta cuando se inicia osql pero no se sale cuando ésta

termina.

-c cmd_end

Especifica el comando terminador. Por defecto, los comandos son

terminados y mandados al servidor SQL introduciendo la palabra GO.

-h headers

Especifica el número de filas a imprimir entre las cabeceras de las columnas.

Page 215: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: TRANSACT-SQL Y OSQL/ISQL

207

-w column_width

Permite al usuario fijar el ancho de pantalla para la salida. Por defecto son

80 caracteres.

-s col_separator

Especifica el carácter separador de columnas. Por defecto es un espacio en

blanco.

-t time_out

Especifica el número de segundos tras el que un comando expira.

-m error_level

Este parámetro sirve para personalizar los mensajes de error.

-I

Fija la opción de conexión QUOTED_IDENTIFIER a activa.

-L

Lista los servidores localmente configurados y los nombres de los

servidores que actúan en la red.

-?

Muestra un sumario de la sintaxis de osql.

-r {0 | 1}

Redirecciona la salida de los mensajes a la pantalla (stderr). Si no se

especifica un parámetro, o si se especifica 0, entonces sólo los mensajes de

error con un nivel superior a 17 o mayores serán redireccionados. Si se

especifica 1, todos los mensajes de salida (incluyendo “print”) serán

redireccionados.

-H wksta_name

Es el nombre de la estación de trabajo. Éste es almacenado en

sysprocesses.hostname y es mostrado por pantalla por sp_who. Si no se

especifica, se supone que es el nombre del ordenador.

-P password

Es una contraseña de usuario. Si no se usa la opción –P se preguntará por

una.

-R

Especifica que el driver ODBC del servidor SQL usa la configuración del

cliente cuando tenga que convertir monedas, fechas y horas a información de

carácter.

Page 216: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: TRANSACT-SQL Y OSQL/ISQL

208

-S server_name

Especifica el nombre del servidor SQL al que conectarse. Este nombre es el

nombre del ordenador en la red. Esta opción es necesaria si se está ejecutando

osql desde un ordenador remoto en la red.

-i input_file

Identifica el fichero que contiene un conjunto de declaraciones SQL o

procedimientos almacenados.

-o output_file

Identifica al fichero que recibe la salida de osql.

-u

Especifica que el fichero de salida anterior es guardado en un formato

Unicode, sin tener en cuenta el formato del fichero de entrada.

-a packet_size

Permite solicitar un paquete de diferente tamaño. Este tamaño podrá ocupar

desde 512 a 65535.

-b

Especifica que se salga de osql y se vuelva a un valor DOS ERRORLEVEL

cuando ocurra un error. El valor devuelto a la variable DOS ERRORLEVEL es 1

cuando el mensaje de error del servidor SQL tiene un rango de 10 o mayor; de

otro modo el valor devuelto es 0.

-O

Especifica que se desactiven caracteristicas de osql para poder adecuar el

comportamiento al de versiones anteriores de isql.

-l time_out

Especifica el número de segundos antes de que una entrada osql expire. Si

no se especifica ningún valor, el comando permanece activo indefinidamente.

El valor por defecto para hacer un login a osql es de 15 segundos.

Page 217: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: VISOR DE API´s Y DECLARACIÓN DE API´s EN VISUAL BASIC

209

9.5 Visor de API´s y declaración de API´s en

VisualBasic.

En el desarrollo de este proyecto se ha empleado el lenguaje de

programación Visual Basic 6.0, que viene englobado en el paquete integrado

de desarrollo Microsoft Visual Studio 6.0.

Con la instalación de esté sistema, se facilita una herramienta de gran

utilidad a la hora de integrar en las aplicaciones las capacidades del sistema

operativo utilizando el Interfaz de Programación de Usuario (API).

Para poder usar estas funciones, necesitamos saber en que librería

dinámica (Dll) se encuentran y cual es la lista de parámetros que manejan.

Para poder llamar a una función exterior (API) desde Visual Basic es

preciso escribir una sentencia de declaración, en la cual se indica la librería y el

nombre de la función, así como la lista de sus parámetros. Con el fin de

simplificar esta tarea, ya que la declaración de algunas funciones es realmente

compleja, Visual Studio cuenta con una herramienta externa conocida como

Visor de texto API. Con ella es fácil encontrar la función deseada, copiar la

declaración al portapapeles y pegarlo en el editor de código de Visual Basic.

Page 218: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: VISOR DE API´s Y DECLARACIÓN DE API´s EN VISUAL BASIC

210

Figura 9.5. Visor de texto API.

Disponiendo de la declaración de la función, utilizar una API de Windows

será como usar cualquier otra función propia de la aplicación que estamos

desarrollando.

Page 219: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: EJEMPLO DE FUNCIONAMIENTO DE LA FUNCIÓN

CHECKVERSION

211

9.6 Ejemplo de funcionamiento de la función

CheckVersion.

La declaración de la función es la siguiente:

CheckVersion(Byval strSetUpFile As string, Byval strUserFile as string).

Y su cometido es comparar la versión de los dos ficheros dados como

parámetro y devolver TRUE en el caso en que el primero de ellos, es decir el

que está tratando de instalar la aplicación, es más actualizado. En caso

contrario devolverá el valor booleano FALSE.

Para hacer la comparación, primero la función obtiene la versión de los dos

ficheros que se le pasan por parámetro, tras lo que comprueba que ambos

tienen versiones con el mismo número de campos. En caso de que no lo

tengan, incluye en la versión del fichero que tenga menos tantos campos

rellenos de ceros como sean necesarios para igualar el número de campos y

así poder comparar ambas versiones. Por ejemplo, si una versión es

2.31.12.03 y la otra 1.2.3, entonces la función toma ambas, las guarda en unas

variables locales para tratarlas y luego añade a la segunda tantos campos de

ceros como sean necesarios, en este caso uno, quedando la segunda versión

1.2.3.0.

Una vez que ambas versiones son comparables, se hace un bucle que mira

campo tras campo. El proceso llevado en el bucle es coger el campo de las dos

versiones marcado por el índice del bucle y compararlos. En el caso de que los

campos tengan distinta longitud, se rellena con ceros a la izquierda el que sea

menor hasta que ambos sean comparables y luego se comparan. En el

momento en el que dos campos difieran se detectará cual es más actual y se

saldrá de la función.

En nuestro ejemplo el bucle haría lo siguiente:

Page 220: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

ANEXO: EJEMPLO DE FUNCIONAMIENTO DE LA FUNCIÓN

CHECKVERSION

212

Índice del Bucle

Versión del fichero de

la Aplicación

(2.31.12.03)

Versión Actual del

Usuario (1.2.3.0)

1. Tomando el campo 2 1

1. Comparando Más actualizado. Menos actualizado.

La función devuelve

TRUE

Veámoslo ahora con otro ejemplo:

Índice del Bucle

Versión del fichero de

la aplicación

(2.31.12.03)

Versión Actual del

Usuario (2.2.12.03)

1. Tomando el campo 2 2

1. Como ambos tienen

el mismo tamaño, no

es necesario el

rellenado de ceros.

1. Comparando Iguales Iguales

2. Tomando el campo 31 2

2. Rellenando con

ceros 31 02

2. Comparando Más actualizado. Menos actualizado

La función devuelve

TRUE

Cuando se da el caso que ambas versiones son exactamente iguales, la

función devolverá FALSE, respetándose así la configuración del usuario y no

instalándose el fichero procedente de la Aplicación de Instalación.

Page 221: UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenierosbibing.us.es/proyectos/abreproy/10932/fichero/Proyecto.pdf · UNIVERSIDAD DE SEVILLA Escuela Superior de Ingenieros Proyecto Fin

BIBLIOGRAFÍA

213

10. Bibliografía.

Para la realización de este proyecto fue necesario un intenso período de

investigación, donde se consultaron tanto libros como páginas Web y canales

de charla (Chats) especializados.

- Libros y manuales:

[1] Microsoft Corporation, “Mastering Enterprise Development Using Visual

Basic 6”, Microsoft eLearning.

[2] Microsoft Corporation, “Programming a Microsoft® SQL Server™ 2000

Database”, Microsoft Corporation.

[3] Microsoft Corporation, “Microsoft® Visual Basic® 6.0, Guía de herramientas

y componentes”, McGraw-Hill.

[4] Microsoft Corporation, “Microsoft® Visual Basic® 6.0, referencia de

controles”, McGraw-Hill.

[5] Christian Wenz,Christian Trennhaus,Andreas Kordwig, “ASP, Active Server

Pages”, Marcombo Boixareu Editores.

- Páginas Web consultadas:

[1] www.programacion.com

[2] www.visualbasicforum.com

[3] www.mentalis.org

[4] support.microsoft.com