En Windows, al menos, una aplicación ejecutándose está bloqueando su propio archivo .exe y todos los archivos .dll enlazados estáticamente. Esto evita que una aplicación se actualice directamente, a clientes potenciales si desea evitar un reinicio (si la reinicialización es correcta, la aplicación puede pasar en el indicador MOVEFILE_DELAY_UNTIL_REBOOT
a MoveFileEx y puede 'sobrescribir' su propio .exe, como se retrasa de todos modos). Esta es la razón por la cual las aplicaciones típicamente no comprueban las actualizaciones en su propio .exe, sino que comienzan una revisión que busca actualizaciones y luego lanza la aplicación 'real'. De hecho, el 'shim' incluso puede ser hecho por el propio sistema operativo, en virtud de un archivo de manifiesto configurado correctamente. La aplicación construida de Visual Studio obtiene esto como una herramienta empaquetada del asistente prefabricado, consulte ClickOnce Deployment for Visual C++ Applications.
La aplicación típica de Linux no se actualiza debido a los muchos muchos muchos sabores del sistema operativo. La mayoría de las aplicaciones se distribuyen como fuente, se ejecutan a través de una versión de auto-infierno para autoconfigurarse y compilarse, y luego se instalan a través del make install
(todas estas se pueden automatizar detrás de un paquete). Incluso las aplicaciones que se distribuyen como binarios para un sabor específico de Linux no se copian, sino que instalan la nueva versión una al lado de la otra y luego actualizan un symbolic link
para 'activar' la nueva versión (de nuevo, una administración de paquetes) el software puede ocultar esto).
Las aplicaciones de OS X caen en el cubo de Linux si tienen el sabor de Posix, o caen en el cubo de la aplicación Mac AppStore que maneja las actualizaciones por usted.
Me gustaría que la actualización de su propia auto-actualización nunca alcance la sofisticación de ninguna de estas tecnologías (ClickOnce, RPM, AppStore) y ofrezca al usuario el comportamiento esperado ante descubrimiento, actualización y desinstalación. Me gustaría ir con la corriente y usar estas tecnologías en sus respectivas plataformas.
Por lo que sé, Windows no le permitirá sobrescribir un EXE mientras se ejecuta el programa. Esta es una de las cosas más molestas en Windows, imo. – unwind
Como te dije en esa otra pregunta, no puedes sobrescribir un exe que se está ejecutando. Incluso di instrucciones paso a paso sobre cómo hacer todo este proceso. –
@MooingDuck ¡Lo sé! Todavía estoy haciendo referencia a su respuesta como un diseño de alto nivel. Simplemente estoy reduciendo el alcance de esta pregunta en particular. Ya estoy bastante satisfecho con las respuestas. – TheBuzzSaw