Implementación de aplicaciones de Windows Forms con ClickOnce

 

Mauro Sant'Anna
Microsoft Regional Director

Diciembre de 2004

Resumen: examina la tecnología ClickOnce, la compara con otras tecnologías de implementación y muestra cómo puede usarla en las aplicaciones. (11 páginas impresas)

Introducción

ClickOnce es una nueva tecnología de implementación de Windows Forms que se suministrará con Visual Studio 2005. Permite una instalación sencilla de aplicaciones y la actualización de aplicaciones web con clientes inteligentes. La implementación de Windows Forms aplicaciones a través de HTTP está disponible desde la primera versión de .NET Framework y ha evolucionado desde entonces. En este artículo se describen las ventajas de Windows Forms aplicaciones y la evolución de esta tecnología que conduce a ClickOnce. También mostraré un ejemplo sencillo con la versión beta 1 pública de Visual Studio 2005.

¿Por qué Windows Forms?

Dado que la World Wide Web apareció, la mayoría de los usuarios y desarrolladores están más interesados en las aplicaciones web que en las aplicaciones de Windows "normales". Además del "factor de refrigeración", una aplicación web tiene algunas características interesantes y especiales:

  • Se puede acceder a una aplicación web desde cualquier lugar del mundo donde esté disponible una conexión a Internet; el cliente ni siquiera necesita ejecutar Windows. Una aplicación "web pura" es una tecnología muy buena cuando su aplicación necesita acceso omnipresente.
  • Una aplicación web es fácil de implementar y actualizar: basta con copiar los archivos de aplicación en un directorio en un servidor web y todos los clientes pueden empezar a usar la nueva aplicación al instante. No dll hell, no hay entradas del Registro con las que se van a enredar, sin clases COM para registrar; ¡sólo funciona!

El enfoque de este artículo está en la segunda viñeta anterior: implementación. El protocolo HTTP usado por las aplicaciones web tiene varias ventajas sobre la implementación tradicional de aplicaciones de Windows.

Por otro lado, tanto como me encanta la Web, es difícil decir que la experiencia del usuario en la Web es estelar. En comparación con las aplicaciones de Windows, la Web tiene varias desventajas:

  • Su interfaz de usuario es bastante mala. Las cosas que tomamos para conceder en una aplicación de Windows, como arrastrar y colocar y hacer clic con el botón derecho en el mouse, son muy difíciles o incluso imposibles de hacer en una aplicación web.
  • Incluso cuando logramos hacer trucos de interfaz enriquecidos, normalmente requiere una cantidad loca de script de cliente, un tipo de código que es especialmente difícil de escribir y depurar.
  • Una aplicación web usa una gran cantidad de recursos de servidor, ancho de banda y paciencia del usuario, ya que la mayoría de las cosas se deben hacer en el servidor con un recorrido de ida y vuelta y algunas esperas implicadas.
  • La impresión se limita a la "tecnología de pantalla de impresión", con poco control sobre cosas como saltos de página debido a diferentes fuentes, márgenes y tamaño de papel.
  • Algunos de los problemas anteriores se pueden mitigar mediante el uso de complementos o controles ActiveX, pero, a su vez, tienden a tener los mismos problemas de implementación que las aplicaciones que no son web antiguas solían tener.

¿Qué ocurre si podríamos casarnos con la distribución sencilla de las aplicaciones web con la experiencia de cliente enriquecida de las aplicaciones de Windows? Bueno, podemos. .NET Framework desde su primera versión permite la distribución de Windows Forms aplicaciones a través de HTTP y sin los problemas habituales.

Este tipo de aplicación es especialmente interesante en escenarios de intranet/extranet, donde no se requiere acceso ubicuo y podemos suponer que el equipo del usuario final tendrá instalado Internet Explorer y .NET Framework.

.NET Framework 1. x: HREFing . EXE

Las versiones 1.0 y 1.1 de .NET Framework llegaron "de fábrica" con la capacidad de implementar Windows Forms aplicaciones a través de HTTP. Básicamente, se usa una etiqueta "HREF" para apuntar a un .EXE administrado. Internet Explorer y el entorno de ejecución de .NET Framework pueden descargar y ejecutar no solo el archivo ejecutable, sino también los archivos DLL que podría necesitar, a petición. Este tipo de implementación se ha apodado "hrefing EXE".

Este es un ejemplo de esta etiqueta:

<a href="MainProject.exe">Call MainProject</a>

Esto es bastante fácil de hacer y se ha analizado en estos artículos recomendados:

Dado que el ensamblado de .NET (.EXE o .DLL) es la unidad de implementación básica, quiere dividir la aplicación en una .EXE principal y varios archivos DLL. De este modo, si realiza cambios sencillos en un único archivo DLL, solo es necesario descargar este archivo DLL.

Tan fácil como suena, todavía hay algunos trucos para conseguir que las cosas funcionen correctamente:

  • The.NET Framework debe haberse instalado previamente en el cliente (aunque puede descargar un complemento desde https://msdn.microsoft.com/vstudio/downloads/tools/bootstrapper/ el que puede facilitar la instalación del marco y la aplicación).
  • La aplicación se ejecutará en el cliente como código de confianza parcial. Por un lado, esto es bueno porque la aplicación se ejecuta en un espacio aislado y tiene limitaciones sobre lo que puede hacer en el equipo cliente. Por otro lado, si necesita funcionalidad como abrir archivos locales o llamar a un objeto COM, tiene que configurar de alguna manera una directiva de seguridad en el cliente, no es algo trivial.
  • De forma predeterminada, es muy probable que el archivo ejecutable intente cargar varios archivos DLL con recursos de localización; debido a algunos problemas en la implementación actual, el rendimiento se verá afectado, especialmente en un vínculo lento de Internet.
  • Las actualizaciones se realizan por archivo; por ejemplo, no hay ninguna manera de garantizar que todos los 10 archivos actualizados se descarguen realmente; Es posible que el cliente esté bloqueado con una aplicación "media actualizada".
  • La aplicación solo está disponible sin conexión si el usuario configura manualmente "Trabajar sin conexión" en Internet Explorer; la propia aplicación no tiene control sobre ella.
  • De forma predeterminada, el archivo .config asociado con el programa no está disponible (consulte aquí cómo hacerlo).
  • La aplicación no tendrá acceso directo en el escritorio ni en el menú Inicio .

Bloque de aplicación del actualizador

Para solucionar algunos de los problemas indicados anteriormente, Microsoft creó el bloque de aplicaciones del actualizador (BLOB). El bloque del actualizador es una biblioteca que se agrega a la aplicación para administrar la descarga de las partes de la aplicación a través de HTTP.

Tiene algunas ventajas sobre la implementación original del marco:

  • Se ejecuta como una aplicación local y está disponible todo el tiempo sin penalizaciones de rendimiento.
  • Novedades se realizan transacciones; es decir, todos los archivos de una nueva versión deben descargarse correctamente antes de que la nueva versión esté disponible.
  • Todos los archivos de aplicación se muestran en un manifiesto.
  • Se ejecuta como una aplicación de plena confianza; no es necesario fiddle con la directiva de seguridad de cliente.
  • La aplicación puede tener accesos directos en el menú Inicio .

Por otro lado, también hay algunas desventajas:

  • Debe cambiar considerablemente la aplicación para poder usarla.
  • Puesto que usa BITS para descargar las partes de la aplicación, no se ejecuta en Windows 98/ME; Se requiere Windows 2000 o posterior.
  • Se ejecuta como una aplicación local de plena confianza, por lo que omite prácticamente la seguridad de acceso al código.
  • No es compatible con Microsoft.

Para obtener más información sobre el BLOB, consulte Componente del actualizador de aplicaciones .NET de Jamie Cool. También se puede consultar la casa de la PARC en Gotdotnet. El MSDN no es "oficialmente" apoyado, aunque hay un foro en www.gotdotnet.com. En cualquier caso, el STORAGE viene con código fuente completo, y puedes cambiarlo para corregir algunas de sus restricciones, como el requisito de BITS y Windows 2000.

ClickOnce

La JORNADA es claramente una medida provisional mientras Microsoft desarrolla una solución definitiva. Esta solución es ClickOnce. Básicamente, ClickOnce tiene todas las ventajas de la STORAGE con pocos de sus problemas, además de algunas funcionalidades agregadas. En mi opinión, una de las principales ventajas de ClickOnce es que restaura la seguridad de acceso al código.

En comparación con los EXE de HREF, una aplicación ClickOnce tiene las siguientes ventajas:

  • Novedades se realizan transacciones (es decir, se realizan completamente o no).
  • La aplicación no solo puede funcionar sin conexión, pero tiene un grado de control sobre ella; hay API para que la aplicación pueda averiguar si está en línea o sin conexión; también puede controlar su propio proceso de actualización;
  • Tiene una buena integración con Visual Studio .NET, incluida la capacidad de generar los archivos y herramientas adicionales adecuados que ayudan a averiguar qué privilegios de seguridad necesita la aplicación para ejecutarse.
  • Viene con un ejecutable win32 "bootstraper" que puede descargar los componentes necesarios, incluso el propio .NET Framework.
  • Los archivos de aplicación se pueden descargar a petición o en lotes;
  • Puede tener accesos directos del menú Inicio ;

ClickOnce es una característica de Visual Studio 2005, anteriormente denominada "Whidbey", y .NET Framework 2.0. Vamos a explorar un ejemplo con "Community Preview Beta 1" (Versión 2.0.40607 de Framework).

Una aplicación ClickOnce

Vamos a crear una sencilla aplicación ClickOnce siguiendo estos pasos.

  1. Inicie Visual Studio 2005.

  2. Seleccione Archivo y, a continuación, haga clic en Nuevo proyecto.

  3. Elija un lenguaje (C# o Visual Basic .NET) y seleccione Aplicación windows.

  4. Asigne un nombre al proyecto MyClickOnceApp y haga clic en Aceptar.

  5. Agregue un botón al formulario y cambie su propiedad Text a About.

  6. Haga doble clic en el botón. En la ventana de código, escriba el código siguiente.

    Visual Basic .NET:

         MsgBox("My First ClickOnce Application")
    

    C #:

         MessageBox.Show("My First ClickOnce Application");
    

Presione F5 para ejecutar y probar la aplicación.

Todas las aplicaciones de Windows de Visual Studio 2005 tienen una página Publicar en Project | Propiedades de MyClickOnceApp para controlar los detalles de la implementación:

Figura 1. Configuración de los ajustes de publicación

Ubicación de publicación indica desde dónde se implementará la aplicación. Puede ser una ubicación de servidor web (HTTP), como se muestra anteriormente, pero también puede ser una ruta de acceso de red normal.

El modo de instalación y la configuración controlan varios detalles de implementación, como:

  • Si la aplicación también estará disponible en línea o sin conexión.

  • Archivos de aplicación: donde se instalarán archivos individuales.

  • Requisitos previos: si el programa de instalación debe instalar otros componentes, como Windows Installer 2.0, .NET Framework 2.0, J# Redistributable Package, SQL Server 2005 Express, Crystal Reports y Microsoft Data Access Components 2.8.

    Ilustración 2. Configuración de requisitos previos

  • Novedades: controla cuándo la aplicación debe comprobar si hay actualizaciones y cómo se llevan esas actualizaciones al cliente.

    Figura 3. Configuración de actualizaciones

  • Opciones: ajusta detalles como el idioma de la aplicación, el nombre del recurso contextual del menú Inicio , la página HTML usada para la implementación web y el vale de directiva de implementación.

    Figura 4. Configuración de opciones de publicación

Publicar versión ajusta el número de versión de la aplicación; El número de versión se puede aumentar automáticamente en cada implementación.

El Asistente para publicación le permite configurar varias opciones de publicación. También se llama a este asistente desde el menú Compilar | Publicar. Todas las aplicaciones ClickOnce deben estar firmadas criptográficamente; El asistente solicita una clave existente (recomendada) o puede generar una nueva.

Figura 5. Firma de la aplicación

Después de ejecutar el asistente una vez, puede hacer clic en Publicar ahora para publicar actualizaciones. En nuestro ejemplo, se mostrará una página web.

Figura 6. Aplicación publicada

Esta página web contiene un script que comprueba qué paquete de requisitos previos adicional debe instalarse antes de instalar la aplicación. Si no hay un requisito previo, se instalará la primera vez que se ejecute la aplicación.

Después de que el usuario haga clic en el vínculo Instalar , es posible que varios cuadros de diálogo requieran la intervención del usuario, al menos la primera vez que se ejecute:

  • Advertencias de Windows XP SP2
  • Contrato con licencias de software
  • Falta de comprobación de la firma del publicador

Detalles de implementación

Visual Studio .NET 2005 creará una nueva web para nuestra aplicación con varios archivos y carpetas.

Ilustración 7. Carpetas de implementación

La carpeta dotnetfx contiene el archivo redistribuible de .NET Framework, actualmente un ejecutable de 25 MB.

De forma predeterminada, Visual Studio aumentará el número de versión cada vez que implemente la aplicación; cada versión obtendrá una nueva carpeta con el número de versión creciente correspondiente.

El archivo .application es el destino del vínculo que se muestra en la página HTML publish.htm. Es un archivo XML que contiene información como la carpeta correspondiente a la versión actual de la aplicación y las firmas digitales.

Publish.htm es una página web que contiene no solo el vínculo al archivo .application , sino también un script de cliente que realiza alguna comprobación de versiones y muestra los mensajes en consecuencia. Por ejemplo, si el equipo no tiene .NET Framework, el mensaje que se muestra en Instalar MyClickOnceApp será diferente.

Setup.exe es un ejecutable win32 capaz de instalar no solo la aplicación, sino también todos los componentes necesarios, como .NET Framework y MDAC 2.8 en el orden correcto.

Cada carpeta de aplicación contiene los archivos de la aplicación y también un archivo de manifiesto. El manifiesto es un archivo XML con básicamente la siguiente información:

  • Identidad precisa de todos los archivos de la aplicación. Esta identidad consta del nombre de archivo, el número de versión, la referencia cultural y la arquitectura del procesador ("msil" en nuestro caso).
  • Todos los permisos que requiere la aplicación.
  • Firmas digitales.

Ejecutar la aplicación

Una vez descargada la aplicación, puede ejecutarla sin necesidad de volver a descargarla. En nuestro ejemplo, la aplicación se puede iniciar haciendo clic en el vínculo a la página web o en el acceso directo del menú Inicio . En ambos casos, la existencia de una nueva versión se comprueba según la configuración de las opciones de proyecto de Application Novedades. Si es necesario, se descarga una nueva versión.

Para comprobar esta funcionalidad de actualización, haga lo siguiente:

  1. Realice un cambio visible en la aplicación, como cambiar la ubicación del botón en el formulario.
  2. Compile e impleméntelo de nuevo.
  3. Ejecute la aplicación y compruebe el proceso de descarga.

Como última nota, es importante tener en cuenta que esta información se basa en la versión Beta 1 de Visual Studio .NET; Las versiones más recientes pueden tener características diferentes.

Gráfico de comparación

   HREF .EXE UAB ClickOnce
No se requieren cambios en la aplicación X   X
Aislamiento de aplicaciones X   X
Totalmente compatible X   X
Impacto bajo en el sistema X   X
Seguridad de acceso al código conservada X   X
Descarga de archivos a petición X   X
Manifiestos para enumerar mediante declaración los archivos necesarios   X X
Manifiestos firmados criptográficamente     X
Descarga de archivos de Batch   X X
Trabajar sin conexión (*) X X
Instalaciones de Transacted   X X
Rendimiento óptimo   X X
Se requiere Windows 2000 o posterior   X (**)
Integración de Windows Shell   X X
Buen control sobre el proceso de actualización   X X
API para trabajar sin conexión y controlar el proceso de descarga     X
Instalación automática de paquetes opcionales     X

(*) Requiere intervención del usuario

(**) Demasiado pronto para decir para un producto beta

Conclusión

ClickOnce es una tecnología muy eficaz para la implementación de aplicaciones. Es una evolución natural de los modelos de implementación disponibles anteriormente, lo que reúne la solidez, la seguridad, el rendimiento y la flexibilidad para la experiencia de cliente enriquecida de Windows Forms aplicaciones.

 

Acerca del autor

Mauro Sant'Anna (mas_mauro@hotmail.com) es director regional de Microsoft, MCSD, MCSE, desarrollador y instructor. Es un fiel "primera hora" in.NET desde su aparición pública en el PDC 2000 en Orlando.