2009-07-07 28 views
14

Estoy a punto de desarrollar un programa que se instalará y ejecutará como un servicio de Windows en los servidores de servicios de fondo (con acceso a internet) de varios clientes. No tengo acceso físico a los servidores. En lo que estoy trabajando es en un esquema para implementar de manera confiable las actualizaciones del programa.Actualización automática de un servicio de Windows

He pasado bastante tiempo buscando las mejores prácticas para las actualizaciones automáticas del servicio de Windows, pero he encontrado muy poca información útil. La mayoría de las técnicas, como ClickOnce, parecen atender principalmente a las aplicaciones basadas en Windows Forms.

Mi plan actual es:

  • Cuando las actualizaciones están disponibles, tienen la descarga servicio en ejecución, instale e inicie un servicio de actualización.
  • El servicio de actualización descargará la nueva versión del servicio principal y la instalará lado a lado de la versión actual, todavía activa.
  • El servicio de actualización detiene la versión anterior y luego inicia la nueva versión del servicio.
  • La nueva versión desactiva el servicio de actualización durante el inicio.

Algunos aspectos importantes para mí son:

  • Ser capaz de manejar las actualizaciones tanto para el servicio principal y el servicio de actualización
  • Ser capaz de manejar las interrupciones, tales como corte de corriente o un fallo de conexión en cualquier punto durante el proceso de actualización

Lo que me pregunto es si esta es una forma común de resolver este problema y/o si me falta algo crucial. ¿Es demasiado complicado, o quizás demasiado simplista? ¿Cómo lo hubieras hecho (o, mejor aún, cómo has hecho esto con éxito)?

Gracias!

Respuesta

13

Me enfrenté con el mismo problema el año pasado y luché con muchas de las mismas preguntas. Unos pequeños consejos:

  • Desde cualquiera de los servicios puede ser actualizado, ambos servicios funcionarán como actualizadores de la otra. El servicio A se actualiza el servicio B y viceversa. Para esta razón, sugiero simplemente ejecutar ambos servicios en todo momento. A menos que le preocupe realmente cargar en su servidor con llamadas does-update-exist, activar/desactivar la administración del servicio no vale la pena la sobrecarga.

  • Los servicios similares no se pueden instalar en una sola máquina . En otras palabras, usted no puede instalar las versiones nuevas y viejas de el servicio una al lado de la otra si tienen con el mismo nombre. A menos que desee complicar su proceso de actualización, I le sugerimos que desinstale la versión anterior y luego instale la nueva versión. Por ejemplo, el Servicio A descargaría Instalador del Servicio B, desinstala Servicio B, instala la nueva versión de Servicio B y luego ejecuta.B Servicio haría lo mismo para el servicio de A.

  • Dado que cada servicio está gestionando la otra, que no sólo debe comprobar si hay actualizaciones disponibles pero deberían verificar la salud de los demás. Para el ejemplo , el Servicio A verificaría para ver si el Servicio B existe y si se está ejecutando . Si el chequeo de la falla, una lista de pasos para resolver el problema y obtener el servicio en ejecución se completa con servicio A. La ejecución de las operaciones de comprobación y recuperación de la salud te cubrirá ahora importa qué tema surge con la actualización , inicial instalación u operaciones generales.

  • Haga un amplio inicio de sesión tanto en el cliente como en el servidor. Deberá realizar un seguimiento de qué acciones se realizaron y cuándo. Por ejemplo, el Servicio A podría cuando está buscando actualizaciones, cuando es ejecutando la comprobación de estado y acciones asociadas. En el servicio (asumiendo que está llamando a un servicio web en busca de actualizaciones) rastree las llamadas realizadas por cada Servicio. Si sus Servicios no se actualizan al menos, tendrá un rastro de migas de pan (o falta de migas de pan) que le indica el problema.

Hay literalmente racimos de trampas potenciales con una solución de este tipo: los servicios no se está ejecutando en el inicio, UAC en el camino, al no ser capaz de instalar y desinstalar los servicios con el mismo usuario, asegurando la instalación de usuario el servicio tiene amplios permisos, pérdida de conectividad, instalación de .NET Framework en el equipo cliente, manejo del reinicio después de la instalación si es necesario, etc.

Lo mejor de la suerte. Es un problema divertido de resolver, pero no deja de ser frustrante, especialmente porque, como dijiste, no hay mucha información documentada disponible.

+0

Gracias por su valiosa contribución. ¿Cómo manejó la situación potencial donde el proceso de actualización se interrumpe después de que se desinstala la versión anterior pero antes de que se haya instalado la nueva? ¿Mantuvo un registro de cuán lejos estuvo en el proceso? –

+0

No realizo instalaciones incrementales. El servicio está instalado y en ejecución o no lo está. Por lo tanto, no hago un seguimiento de qué tan avanzado estoy en el proceso. Yo * simplemente * uso los controles de estado para determinar si algo no está bien y vuelva a intentar la instalación si es necesario. –

+0

@Ben ¿Ha publicado sus experiencias en algún lado? –

Cuestiones relacionadas