c# java c++ launcher

c# - ¿Cómo se actualiza un lanzador de aplicaciones?



java c++ (3)

Básicamente, el iniciador verifica si hay una versión más nueva de sí mismo, y si es así, inicia una tarea para obtener la nueva versión y luego la ejecuta y luego la cierra.

Dado que la aplicación de actualización es pequeña y se carga rápidamente, puede hacer que la detecte, la descargue, que aparezca un cuadro de diálogo para indicar que hay una nueva versión y que apenas parpadee cuando la versión anterior se cierra y la nueva se ejecuta.

Los lanzadores son los más comunes en los juegos. Piensa en League of Legends, Starcraft II o en casi cualquier MMO. Antes de comenzar el juego real, tienes una pequeña aplicación de inicio que se encarga de las actualizaciones y parches.

Quiero mover esta dirección con una aplicación particular que no sea de juego que estoy desarrollando. El concepto del iniciador tiene mucho sentido: comprueba si hay actualizaciones, reemplaza los binarios / bibliotecas apropiados, tal vez ejecuta una verificación de integridad y lanza la aplicación. Sin embargo, ¿cómo se actualizan los lanzadores? Esto suele ser un evento raro, pero ¿cómo se hace? ¿El lanzador, literalmente, simplemente escribe sobre el código binario desde el que se está ejecutando actualmente? ¿O hay algún tipo de paso de intercambio después de la descarga? Necesito poder enviar actualizaciones (raras) al lanzador (especialmente si descubro algún error en mi lanzador).

Mi proyecto particular será en C #, pero también me interesan las soluciones conceptualmente similares en C ++ y / o Java para futuras referencias.


Nunca lo he intentado, pero esto es lo que supongo (suponiendo que no pueda sobrescribir un archivo que se está ejecutando. Si puede, todo es más sencillo)

Updater A checks if its the newest version If launcher isnt the newest version Download the differences (to save bandwidth) to file B Apply the delta to own code into file C Launch file C. Close If file C exists (update happened recently) Try to delete C (update was previous launch, delete temporary file) If delete fails (We are C, means A is out of date) Copy C over A (update launcher) Note that you can keep going, don''t have to restart even though we are C. If game isnt newest version Download the differences (to save bandwidth) to file B Apply the delta to game into file D delete game Rename D -> game Run game

André Caron me ha demostrado que el truco de intercambio se hace mejor con el archivo transaccional IO .


Si se encuentra en el mundo .NET, existe una estrategia de implementación llamada ''Click Once''. Esto fue creado para resolver el problema que has descrito ...

ClickOnce es una tecnología de implementación que le permite crear aplicaciones basadas en Windows de actualización automática que se pueden instalar y ejecutar con la mínima interacción del usuario. La implementación de ClickOnce supera tres problemas principales inherentes a la implementación:

Fuente: Click Once

Antes de embarcarse en esta estrategia, sugiero investigar sus ventajas y desventajas porque hay fanáticos y detractores ávidos.

Brevemente, usted carga nuevas versiones en un sitio web (para lo cual la aplicación está configurada para conocer). En el momento de la puesta en marcha, la aplicación comprueba el sitio y, si hay una actualización, ofrece al usuario un cuadro de diálogo. Cuando el usuario elige aplicar la actualización, la aplicación se detiene y, al mismo tiempo, se activa un componente ''clic una vez'' para aplicar los cambios. El componente luego reinicia el archivo ejecutable y todo esto aparece como una operación perfecta para el usuario final ...