23 de mayo de 2008

Haciendo aplicaciones portables en VFP - Parte 3 de 3

Autor: Sergio Hugo Sanchez

Y por último, llegamos a Windows Vista y sus consecuencias de automatizar el proceso de instalación de los controles ActiveX. Despues de probarlo en un sistema Vista, el programa seguía sin funcionar; asi que me dedique a buscar en Internet todo lo que pude relacionado al tema de instalación. Para resumir, he aquí 3 puntos:

1) Instalacion de los controles desactivado la UAC de Windows Vista mediante el panel de control. (Difícil).

2) Instalación de los controles usando archivos Manifest (como indica su blog Calvin Hsia (Medio)

3) Instalación de los controles con derechos de administrador (Facilísmo tan a la vista que no me lo creo!).

Bien. La cuestión es que Windows Vista y su seguridad no permiten el registro automático. El primer punto, seria necesario que la PC donde trabajemos tuviera desactivado esto, pero lo menciono como difícil porque yo daré mi aplicación a un usuario y no creo que el quiera esta apagando el UAC si se encuentra con una maquina Vista.

El segundo método, me llevo a leer en el blog de Calvin su método para crear archivos Manifest que se pegan al EXE para que se autoregistren los controles. Ademas, en la propia ayuda de DBITech, informan sobre lo que se tiene que hacer para registrar sus controles. En este explica como se debe ejecutar el programa REGSVR32 como administrador y en otro tema como hacer los archivos MANIFIEST para los controles DBI.

Utilizando las herramientas de Markus Winhard quien creo Manifest Tools, pude crear mi archivo Manifest y anexarlo a mi .EXE.

La idea es crear un archivo aplicacion.exe.manifest (xml) con las instrucciones de registro. Luego, "agregar" este archivo al ejecutable.

En la aplicacion ejemplo que utilice uso dos controles DBI: ctDropDate que es un control para desplegar un calendario y poner fechas y el ctToolBar que es una barra de herramientas con iconos.
<?xml version="1.0" encoding="utf-8"?>
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0"
 xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
 xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns="urn:schemas-microsoft-com:asm.v1"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“>
<assemblyIdentity 
        name="monitortc2.exe" 
        version="1.0.0.0" 
        type="win32" 
/>
<file name="ctDropDate.ocx" asmv2:size="139264">
    <typelib tlbid="{29F50288-212F-11D5-A85D-0080C8DFC881}" 
        version="2.0" 
        helpdir="" 
        resourceid="0" 
        flags="HASDISKIMAGE"  
     />
    <comClass clsid="{29F50288-212F-11D5-A85D-0080C8DFC881}" 
        threadingModel="Apartment" 
        tlbid="{29F50288-212F-11D5-A85D-0080C8DFC881}" 
        progid="ctDropDate.ctDropDateCtrl.2" 
        description="ctDropDate Control" 
     />
</file>

<file name="ctToolbar.ocx" asmv2:size="167936">
    <typelib tlbid="{83A59732-3096-4711-A41B-8CF8FF98326E}" 
        version="3.0" 
        helpdir="" 
        resourceid="0" 
        flags="HASDISKIMAGE"  
     />
    <comClass clsid="{43A5A355-2366-438A-AA33-1C30DA9E3686}" 
        threadingModel="Apartment" 
        tlbid="{83A59732-3096-4711-A41B-8CF8FF98326E}" 
        progid="ctTOOLBAR.ctToolBarCtrl.3" 
        description="ctToolBar Control 3" 
     />
</file>

</assembly>
Como se puede apreciar, tengo 2 controles que registrar para este ejecutable. Los datos de typelib y Class ID fueron tomados usando la herramienta OLEVIEW (que esta en Microsoft pero tambien en Download.com).

Luego, usando la herramienta de Importar Manifest al EXE como mencione antes, queda listo mi ejecutable. Lo probamos y … wala! Registrado.

Ahora bien, como tercer punto, creo que es mucho mas sencillo el ultimo. Porque sin crear ningún Manifest, cuando ponemos nuestro USB y le damos a ejecutar nuestro programa, en lugar de usar el doble click con el botón izquierdo damos click al botón derecho. En el menú, le damos click en EJECUTAR COMO ADMINISTRADOR. Y listo! El programa registra los controles igual que en XP sin crear ningun archivo ni paso extra (porque, oiga usted, esta medio engorroso andar buscando los archivos OCX con sus clases y demás del registro para hacer el dichoso archivo XML).

Si le digo a mi usuario, dale doble click para usar el programa desde el usb portable y si ves que usas Vista, dale un click derecho y ejecútalo como administrador, pues hasta aquí llegamos.

Estoy buscando crear una rutina para identificar el OS que se trate y lanzar un mensaje de advertencia. O simplemente dejar el manifest y listo. Dependerá del tiempo que tenga en preparar mi aplicación para ser portable.

RESUMEN

Hasta aquí, creo que hacer portable una aplicación VFP no lleva mas que copiar todos los archivos necesarios a una carpeta junto con su RUNTIME. En el caso de controles extra, implica el problema de registrarlos debidamente. No probé esto con versiones anteriores de Windows y por supuesto en otros ambientes.

Otra desventaja es que la aplicación portable siempre estara del orden de 5 a 10MB. Por que? Porque los runtimes casi ocupan unos 5MB (o un poquito mas) mas el EXE y los archivos necesarios (ico, bmp, log, mem, ini, etc, etc).

La ultima cosa es trabajar con los datos. Tener nuestras rutinas claras para la conexión con los datos, ya sea de manera local (sistemas sencillos) o de manera remota (para LAN, WAN o internet).

Seguiré probando este método para ver que tan bien trabaja. Deseeme suerte.

No hay comentarios. :

Publicar un comentario