2010-09-20 16 views
5

Tengo un sistema con dos aplicaciones web, un servicio web, un servicio de Windows y una aplicación WPF que funciona las 24 horas del día en una pantalla táctil. Todos ellos están conectados a una base de datos.Actualización automática

Quiero poder actualizar todas esas aplicaciones cargando archivos de actualización a la base de datos y estableciendo la fecha y la hora para que ocurra la actualización.

Tengo una idea sobre cómo hacer esto.

  1. Una aplicación tiene un hilo ejecutándose para buscar las actualizaciones disponibles.
  2. Cuando se encuentra una actualización, el archivo se descarga a la computadora de la aplicación.
  3. Cuando se completa la descarga, las aplicaciones desencadenan un reinicio.
  4. Cuando se inicia la aplicación, busca un archivo de actualización en la computadora local.
  5. Si la actualización está disponible, la aplicación se actualiza a sí misma.

No estoy seguro de cómo se deben hacer todos estos pasos, especialmente el último. Pero quiero algunos comentarios sobre esto. ¿Es esto completamente incorrecto? ¿Estoy en el camino correcto? ¿Algún consejo sobre cómo hacerlo así o de otra manera?

+1

Sí, su enfoque es viable. Dependiendo del tamaño del archivo de actualización, probablemente no lo almacenaría * en * la base de datos, pero eso es solo un detalle. – Piskvor

+0

Piskvor tiene razón, no desea almacenarlo en la base de datos. He publicado una respuesta a continuación que le informa sobre ClickOnce. – Bronumski

+0

¡También consideraría una forma de deshacer, en caso de que la actualización falle! Especialmente si no tiene acceso físico al dispositivo. – chriszero

Respuesta

1

Creo que vas por las líneas correctas aquí. Una aplicación de sondeo para verificar la existencia de una nueva actualización seguida por un script de implementación de xcopy lo haría.

Esto también se puede hacer a partir de una secuencia de comandos de PowerShell, que se ejecuta según un cronograma, es decir, cada 10 minutos. Podría verificar la base de datos, cerrar el proceso y el servicio, copiar la aplicación (de una fuente compartida) y reiniciar dicho servicio y aplicación.

Todo esto asume que no está usando Windows Installer para empacar e implementar su aplicación inicialmente. Aunque una copia para reemplazar directamente los binarios no dañaría un paquete MSI, no es recomendable. Usamos la implementación de AD MSI en el trabajo y es un dolor en el mejor de los casos.

MSDN contiene referencias para la implementación de MSI vs XCopy para aplicaciones WPF (así como los requisitos de seguridad).

Este fue el primer enlace que he encontrado para realizar consultas SQL desde PowerShell: http://elegantcode.com/2008/03/27/discovering-windows-powershell/

Buena suerte!

0

¿Realmente desea ejecutar una actualización desde la base de datos o es solo una solución posible? Estás reinventando la rueda.

Eche un vistazo a la implementación ClickOnce, todo lo que necesita ya está hecho para usted e integrado en VisualStudio. Si utiliza algo que ya existe, tiene el beneficio de la documentación existente, blogs útiles de personas que ya han pasado por los puntos problemáticos y las actualizaciones y correcciones.

ClickOnce Deployment

ClickOnce Deployment in .NET Framework 2.0

¿Cómo desea utilizar ClickOnce depende de lo que quiere salir de ella.De manera predeterminada, puede crear fácilmente una implementación que verifique una actualización cada vez que ejecute la aplicación, pero también con un poco de código puede hacer que la aplicación compruebe si hay actualizaciones mientras se está ejecutando.

La aplicación de actualización BlockVersion que mencionó Dominic Zukiewicz es el precursor de ClickOnce.

EDITAR

ClickOnce proporciona un escenario de retroceso en el servidor y el cliente final. El cliente puede retroceder a una versión anterior utilizando el diálogo de agregar programas eliminar normales y puede volver a publicar fácilmente una versión anterior.

+0

Suena bien. Pero algunas cosas que creo que no funcionan en mi escenario. ¿Funciona para todos nuestros tipos de aplicaciones (web, WPF, servicio)? Requiere acceso a internet para todas las aplicaciones? ¿No puede elegir qué instalación de sistema para obtener la actualización? Podría estar equivocado en algo aquí. –

+0

Lo siento, me perdí la frase "Quiero poder actualizar todas esas aplicaciones". La respuesta corta es no, usted usaría ClickOnce para una aplicación cliente. Si desea actualizar todas las aplicaciones de la misma manera que puede querer reconsiderar su estrategia de implementación, rara vez hay una solución única para todos. Lo que puedo decir es de la experiencia al implementar a un usuario final ClickOnce es una herramienta de implementación muy buena donde se han resuelto todos los problemas y ofrece una muy buena experiencia de usuario. – Bronumski

+0

Lo investigaré un poco más. Todo es mejor que lo que hacemos hoy: VPN y escritorio remoto para todos los servidores que necesitamos y entregamos a los clientes donde no tenemos acceso VPN. –

1

Tendrá problemas para hacer esto con ClickOnce. ClickOnce solo funcionaría para su aplicación WPF, no puede hacer nada con los servicios o la aplicación web. Podrías escribir una aplicación "Updater" desplegada por ClickOnce, cuya tarea es actualizar las otras aplicaciones, pero aún así parece un poco dudoso.

Puede sonar estúpido, pero empezaría por lo más simple que se me ocurriera. ¿Qué le parece usar Dropbox para enviar sus archivos de actualización? luego, una secuencia de comandos AutoHotKey que se ejecuta al inicio, mira la carpeta de Dropbox en busca de nuevas actualizaciones y las ejecuta.

Suena raro, pero es algo que podrías probar en una o dos horas.

0

Puede crear otro servicio de Windows que realice las actualizaciones diariamente. El servicio buscaría en una carpeta específica si hay actualizaciones para procesar. Por ejemplo, podría buscar un archivo xml que indique la nueva versión de la aplicación y los archivos que se actualizarán. Cerraría la aplicación/los servicios, realizaría una copia de seguridad de los archivos que necesita actualizar, iniciará la aplicación/servicios y limpiará los archivos de copia de seguridad manteniendo al menos tres archivos de respaldo. El servicio debe realizar un seguimiento de la última versión instalada para que cuando lea el archivo xml pueda verificar si se trata de una nueva actualización o no, o simplemente puede eliminar el archivo xml cuando finalice.

0

¿Qué tal Google Omaha? Es una herramienta de código abierto, que actualmente se utiliza para impulsar actualizaciones de Google Chrome y Google Earth. Omaha también puede manejar la instalación de aplicaciones. Se puede encontrar una descripción general del diseño de alto nivel here.

Cuestiones relacionadas