¿Cuál es la mejor manera de actualizar automáticamente una aplicación de Windows? [cerrado]


Google Chrome se actualiza automáticamente cada cinco horas. Quiero clonar esta funcionalidad exacta en mi propia aplicación. ¿Cuál es la mejor manera de implementar esta funcionalidad en Windows?

Author: Eimantas, 2011-09-13

3 answers

Para replicar este comportamiento de actualización necesitas dos cosas:

  1. Una aplicación de actualización que comprueba si hay actualizaciones regularmente. Si se encuentra una actualización, debe instalarla automáticamente. La mayoría de las herramientas de creación de configuración comerciales incluyen buenas aplicaciones de actualización. Puedes intentar escribir un actualizador tú mismo, pero no es tan fácil como parece.

  2. Instalaciones por usuario para cada una de las versiones de sus productos. Una instalación por usuario escribe datos solo en la carpeta del perfil de usuario (AppData, carpeta itinerante, etc.) y HKEY_CURRENT_USER. No hay archivos de programa o HKEY_LOCAL_MACHINE.

Se requieren instalaciones por usuario para que pueda realizar la actualización en silencio. Si la instalación es por máquina, la versión más reciente de Windows mostrará el indicador de elevación y el usuario no sabrá lo que está sucediendo.

El Actualizador

Algunos actualizadores usan servicios. Para las actualizaciones automatizadas, esta no es una solución real porque la instalación del servicio necesita un administrador privilegio. Por lo tanto, su proceso de instalación y las actualizaciones posteriores mostrarían indicaciones de elevación.

Otro enfoque es usar una aplicación de actualización por usuario. No requiere ninguna elevación y se puede instalar en la carpeta de la aplicación. Este tipo de actualizador puede ejecutarse como una tarea programada o desde dentro de su aplicación (ejecútela cuando se inicie su aplicación).

En ambos escenarios, debe tener en cuenta que el Actualizador puede necesitar actualizarse a sí mismo. Así que el proceso que realiza la actualización debe ser un proceso temporal (por ejemplo, una copia temporal de la aplicación updater). También debe correr sin elevación. Esta es la razón por la que un servicio no es una buena idea. Tendría que detenerse antes de la actualización, usar un proceso temporal que maneje la actualización y comenzar de nuevo cuando termine.

Otras cosas a considerar son:

  • problemas de permisos (si el proceso de actualización necesita privilegios o elevación)
  • ubicaciones de descarga
  • actualizar mecanismo de detección (cómo detecta el Actualizador si se debe instalar o no una nueva versión)

Las actualizaciones

Un error común es que las actualizaciones deben ser los archivos de la aplicación (como la aplicación principal EXE). Esto rara vez es el caso porque una actualización puede necesitar sobrescribir algo más que un archivo.

La mayoría de las actualizaciones son paquetes de instalación (MSI por ejemplo) o parches (MSP). Este es el mejor enfoque porque manejan toda la actualización lógica:

  • detectar aplicaciones en ejecución
  • actualizar recursos
  • actualice la información del producto (accesos directos, Programas y características del applet en el Panel de control, etc.)

Los paquetes de instalación también simplifican la aplicación Updater. Con este tipo de actualizaciones, el Actualizador solo necesita detectar las actualizaciones disponibles, descargarlas y ejecutarlas.

Las actualizaciones funcionan de dos maneras:

Windows Installer tiene un gran soporte para ambos, por lo que puede usar paquetes MSI y parches MSP. También admite instalaciones silenciosas, por lo que todo lo que su Actualizador necesita hacer es ejecutar el paquete con un parámetro de línea de comandos.

Estos paquetes también admiten instalaciones por usuario o por máquina a través de ALLUSERS propiedad.

Distribución de actualización

Después de decidir un actualizador y algunos paquetes de actualización, también necesita un mecanismo de distribución:

  • una forma de informar al actualizador de que hay actualizaciones disponibles (por ejemplo, un archivo de información de actualizaciones en su servidor)
  • una forma de detectar si una actualización está instalada o no (por lo que se instala solo una vez)

Todo esto no es muy fácil. Esta es la razón por la que muchos productos utilizan actualizadores de terceros. Incluso algunos las herramientas de creación de configuración comerciales ofrecen actualizadores para sus paquetes.

Un actualizador personalizado es utilizado principalmente por empresas muy grandes con una gran cantidad de productos, porque la inversión vale la pena para ellos.

 75
Author: user527987,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-23 06:48:15

Si desea tener exactamente la misma funcionalidad, puede hacerlo. Google lo tiene de código abierto.

Https://github.com/google/omaha

 25
Author: Tim Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-17 11:46:22

Prueba winsparkle - https://github.com/vslavik/winsparkle . Es una biblioteca de c++.

 2
Author: Y.N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-15 13:07:01