Pregunta

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

Editar] Aquí hay un enlace a una pregunta similar con enlaces a proyectos modernos que ayudan a lograr esto: ¿Biblioteca de actualización automática para .NET?

¿Fue útil?

Solución

La única forma de descargar tipos es destruir el dominio de la aplicación.Para hacer esto, sería necesario separar la capa de alojamiento del código de servicio en ejecución; esto es bastante complejo.(algo así como hacer una cirugía de ojo de cerradura)

Puede ser más fácil a) ejecutar una tarea por lotes ob) detectar actualizaciones en el servicio y luego iniciar un proceso separado que detenga el servicio, actualice los ensamblajes, etc.luego lo reinicia.

Si está interesado en lo primero, la gente de patrones y prácticas de MSDN escribió un bloque de actualización de aplicaciones que puede adaptar a su servicio.

https://web.archive.org/web/20080506103749/http://msdn.microsoft.com/en-us/library/ms978574.aspx

Otros consejos

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

Sin embargo, lo que podría intentar es separar la lógica empresarial del servicio del código de servicio real en diferentes ensamblados.Haga que el ensamblado de servicio verifique las actualizaciones del ensamblado de lógica de negocios a intervalos regulares, cópielo desde una fuente remota si es necesario, descargue el ensamblado BL antiguo (y tal vez elimínelo) y luego cargue dinámicamente la nueva versión (descargar el ensamblado antiguo no es una tarea trivial).

Otra posible solución es tener un servicio independiente que se ejecute, detenga el otro, si hay una actualización, y luego actualice el servicio.No puede tener una actualización del servicio porque el .dll que se está ejecutando no se detiene.

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

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

He estado usando WyBuild para actualizar mis aplicaciones (incluidos los servicios de Windows) y es bastante impresionante.Realmente fácil de usar y realmente fácil de integrar con 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 es un framework pago (la licencia es por desarrollador, se incluye una prueba gratuita)

En caso de que alguien más esté buscando esto;Me pareció interesante este enlace.No he implementado esta solución, pero parece que podría funcionar para mí.

http://www.eggheadcafe.com/articles/20041204.asp

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top