2008-09-20 22 views
27

¿Existe un marco que se pueda usar para habilitar un servicio de Windows C# para buscar automáticamente una versión más nueva y actualizarse? Ciertamente puedo escribir código para lograr esto, pero estoy buscando un marco que ya haya sido implementado y (lo más importante) probado.Quiero que mi servicio de Windows C# se actualice automáticamente

[editar] Aquí hay un enlace a una pregunta similar con enlaces a los proyectos modernos que ayudan a lograr esto: Auto-update library for .NET?

+0

acabo de encontrar un blog "Creación de una aplicación automática de actualización en .NET/C# "(http://www.nerdparadise.com/tech/csharp/autoupdatingapp/) con un enlace al código. Es para una aplicación, en lugar de un servicio, pero apuesto a que podría actualizarse fácilmente para que funcione. –

Respuesta

16

La única manera de descargar tipos es destruir el dominio de aplicación. Hacer esto requeriría la separación de su capa de alojamiento de su código de servicio en ejecución, esto es bastante complejo. (algo así como hacer cirugía de ojo de cerradura)

Puede ser más fácil a) a) ejecutar una tarea por lotes o b) detectar en el servicio las actualizaciones y luego iniciar un proceso independiente que detiene el servicio, actualiza los ensamblajes, etc. luego lo reinicia.

Si está interesado en lo primero, el personal de patrones y prácticas de MSDN escribió un bloque de actualización de la aplicación que usted adapta a su servicio.

http://msdn.microsoft.com/en-us/library/ms978574.aspx

+0

Me sorprende que, como hoy, no haya una solución fácil después de 3 años. Gracias stepbu. – Sauleil

+0

Descargar un tipo es muy difícil. Implicaría desenrollar todas las instancias de ese tipo en la memoria, más cualquier referencia a esa instancia, p. miembros y propiedades en otras instancias. Un efecto secundario que podría ser una aplicación moderadamente compleja muy impredecible. La solución descargue appdomain da un paso al lado de ese problema invalidando toda la memoria en ese dominio de aplicación. Dejándolo para tratar con un solo problema (aunque más grande, pero determinista). – stephbu

+0

Sé que esta es una pregunta antigua, pero también quería agregar que las empresas actuales que tienen recursos más que suficientes para hacer las cosas "de la manera correcta", como Adobe y Google, también se han decidido por el servicio por separado. patrón de just-for-checking-updates. Puede que no estén usando C# y sus proyectos pueden no ser similares a sus proyectos, pero creo que al menos es útil reconocer que esta es una solución real con beneficios reales, no solo un truco bastante bueno por ahora. – GrandOpener

-1

Podría aclarar su pregunta un poco? Estoy un poco confundido, porque hasta donde yo sé, siempre puede sobrescribir las DLL que utiliza el servicio. La copia y el reinicio del servicio pueden hacerse fácilmente parte de su proceso de compilación.

+0

Perdón por la confusión. Me gustaría que mi servicio pueda sondear las actualizaciones y autoinstalarlas cuando las encuentre. Tengo muchos servicios en muchos servidores de producción (acceso controlado) y estoy muy cansado de la dificultad y el riesgo de las intervenciones manuales. –

3

No conozco ningún Frameworks que facilite soluciones a este problema específico.

Lo que podría intentar sin embargo es separar la lógica comercial del servicio del código de servicio real en diferentes conjuntos. Haga que el conjunto de servicio compruebe las actualizaciones del ensamblaje de lógica de negocios a intervalos regulares, cópielo de una fuente remota si es necesario, descargue el antiguo ensamblaje BL (y quizás elimine) y luego cargue dinámicamente la nueva versión (la descarga del ensamblaje antiguo no es una tarea trivial).

2

Otra posible solución es tener un servicio independiente que se ejecuta, se detiene el otro, si hay una actualización, y luego actualiza el servicio. No puede tener una actualización de servicio porque el .dll que se está ejecutando no se detendrá.

Separar la capa de lógica de negocios sería una buena opción. También podría reescribir el servicio principal para que se ejecute bajo reflexión por un maestro o servicio de control. Esto es similar a separar la lógica comercial, y solo requeriría detener un hilo y comenzarlo de nuevo.

No conozco ningún marco conocido que lo haga. Lo hice yo mismo, pero ese no es un marco público.

2

He estado usando WyBuild para actualizar mis aplicaciones (incluyendo servicios de Windows) y es bastante impresionante. Realmente fácil de usar, y realmente fácil de integrar con las aplicaciones existentes. Es un marco de actualización automática bastante bueno ...

http://wyday.com/wybuild/help/automatic-updates/windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows-service.php

Tenga en cuenta que se trata de un marco pagado (la licencia es por desarrollador, una versión de prueba está incluida)

+1

¿Existe alguna posibilidad de que esté afiliado con el producto en cuestión? –

+1

No, solo soy un usuario normal ... (¡Perdón por la respuesta tardía!) – Omaer

Cuestiones relacionadas