He creado un servicio de Windows, ahora quiero que se actualice automáticamente. He leído sobre la creación de un segundo servicio para hacer eso o un programa diferente, no puedo usar clic, ¿qué hay de myBuild? ¿Alguien lo sabe? ¿Cuál es la mejor manera? ¿Puedo simplemente cambiar ensamblajes?Actualiza silenciosamente un servicio de Windows
5
A
Respuesta
5
Si usted quiere que su servicio se ejecute mientras está realizando una actualización, esto es lo que había hecho antes de lograr esto:
- Deja tus lógica updateble en una DLL separada.
- Cree un dominio de aplicación dentro de su servicio.
- Crear supervisor de archivo que activa un suceso siempre se copia ese archivo (se puede utilizar MSFT Ent Lib Actualizaciones)
- Descargar la edad DLL mientras que el bloqueo (cola) los hilos que se ejecutan cosas de esa DLL
- de carga en el nuevo archivo dll en el dominio de la aplicación.
- Deja que tus hilos sepan que puedes seguir procesando.
3
- Descargue el nuevo exe y cualquier ensamblaje adicional.
- Cambie el nombre de su conjunto existente.
- Copie en su nueva ensambladura.
- Reiniciar servicio. Puede construir la función de reinicio del servicio en su exe de servicio principal.
- Cuando se inicia el servicio, compruebe los archivos renombrados desde el paso 2 y elimínelos para limpiarlos.
Para reiniciar el servicio de hacer
System.Diagnostics.Process.Start
(System.Reflection.Assembly.GetEntryAssembly().Location)
Luego, en el servicio de hacer
private const string _mutexId = "MyUniqueId";
private static Mutex _mutex;
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
try
{
bool alreadyRunning = false;
try
{
Mutex.OpenExisting(_mutexId);
alreadyRunning = true;
}
catch (WaitHandleCannotBeOpenedException)
{
alreadyRunning = false;
}
catch
{
alreadyRunning = true;
}
if (alreadyRunning)
{
using (ServiceController sc = new ServiceController("MyServiceName"))
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 120));
sc.Start();
}
return;
}
}
catch
{
}
_mutex = new Mutex(true, _mutexId);
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
// Load the service into memory.
ServiceBase.Run(ServicesToRun);
_mutex.Close();
}
1
Se podría modificar su servicio de Windows de modo que no es más que un corredor para su aplicación principal, y tiene la funcionalidad para actualizar su aplicación principal.
por lo que tendría:
Service.exe: Ejecuta aplicación.exe, supervisa ubicación remota de cambios a aplicación.exe. Envía eventos de inicio/detención a Application.exe
Application.exe: lo que solía ser su Service.exe. Recibe eventos de inicio/detención.
Cuestiones relacionadas
- 1. Reiniciar un intérprete de Python silenciosamente
- 2. Actualización automática de un servicio de Windows
- 3. Console.WriteLine() dentro de un servicio de Windows?
- 4. Usando Ninject con un servicio de Windows
- 5. Reiniciar mediante programación un servicio de Windows
- 6. Crear un servicio de Windows en delphi
- 7. WCF Seguridad en un servicio de Windows
- 8. ¿Iniciar un servicio de Windows deshabilitado?
- 9. Problema al probar un servicio de Windows
- 10. ClickOnce ¿implementar un servicio de Windows?
- 11. Crear un servicio de Windows en vb6
- 12. instalar/desinstalar un servicio de Windows
- 13. Ejecutar pdflatex silenciosamente
- 14. Cómo iniciar silenciosamente Sinatra + Thin?
- 15. Problema extraño con un servicio Windows .NET
- 16. Instalación de un servicio de Windows de desarrollo propio
- 17. filesystemwatcher como servicio de Windows?
- 18. WCF Servicio de Windows TimeOut
- 19. Servicio de Windows terminado inesperadamente
- 20. Iniciar un proceso con credenciales de un servicio de Windows
- 21. Creación de un instalador MSI para un servicio de Windows
- 22. Despliegue del servicio de Windows
- 23. ¿Convierte un programa C++ a un servicio de Windows?
- 24. Crear un servicio de Windows para abrir un programa- Delphi
- 25. Pasar un objeto como parámetro a un servicio de Windows
- 26. Cómo crear un servicio de escucha C# para MSMQ como un servicio de Windows
- 27. imagecreatefromjpeg está terminando scripts silenciosamente
- 28. ¿Por qué $ .getJSON falla silenciosamente?
- 29. hg-git push silenciosamente falla
- 30. sleep() silencia silenciosamente la CPU
... disculpa, probablemente no se explica terriblemente bien. Escribir respuestas de SO a las 3 a.m. probablemente no sea la mejor idea;) –