c# - una - view lenta mysql
No "entiendo" cómo un programa puede actualizarse. ¿Cómo puedo hacer mi actualización de software? (9)
Digamos que hago un archivo .exe y todo es peachy. Maravilloso funciona.
Digamos que trabajé en una nueva función en el software y quiero que esté disponible para las personas que ya tienen la versión anterior. ¿Cómo puedo hacer que el software encuentre mi nueva versión, la parche y luego continúe con el negocio?
Parece que no puedo envolver mi cabeza en torno al problema.
Gracias.
EDITAR: Lamento la confusión, pero me refería a una respuesta más codiciada. ¿Hay algo especial en mi código que debería tener que permitir la actualización?
Por ejemplo, si quiero agregar una nueva función, ¿cómo puedo agregar un "método" a un archivo .exe ya empaquetado? : S Eso me tiene girando.
Bueno, la forma habitual es que su aplicación verifique regularmente en algún lugar (generalmente en Internet) las nuevas versiones. Esto puede ser en cada inicio o una vez a la semana o lo que sea.
Allí puede simplemente poner, por ejemplo, un archivo de texto que contenga el número de versión actual. Si ese es más nuevo que la versión de la aplicación instalada, puede descargar un actualizador (no olvide firmar y verificar las firmas) e instalar la nueva versión.
Desde el punto de vista del código, me gusta tener un enfoque que consiste en una interfaz simple llamada IRun y otra llamada IUpdated:
public interface IRun()
{
public void Run();
}
public interface IUpdated()
{
public void Update();
}
Ahora mi aplicación principal solo cargará y "ejecutará" una biblioteca utilizando la reflexión que a su vez iniciará la aplicación real.
El ejecutable principal de la aplicación hará estos pasos:
- Lea updater.cfg, conéctese a la ubicación provista y busque actualizaciones para el actualizador .
- Si hay actualizaciones, descargue los dlls actualizados y updater.cfg
- Usando el reflejo de carga updater.dll e inicie el método Update ().
El método de actualización realiza los mismos pasos para las actualizaciones de la aplicación real.
Finalmente
- Cargue "core.dll" y ejecute el método Run ().
Por supuesto, siempre y cuando desees "hacerlo tú mismo", ClickOnce también es un método muy bueno, probablemente mejor, pero te da menos control. El ejecutable principal de la aplicación es lo suficientemente simple para evitar tener que actualizarlo por sí mismo o debería serlo de todos modos.
Haga que su aplicación haga una solicitud de vez en cuando a su servidor web. Haga que esa solicitud devuelva un archivo que contenga el número de versión y un enlace a la versión más reciente de su instalador. Si ese número de versión es mayor que el número de versión que el programa actualmente en ejecución piensa que es, haga que su programa descargue el nuevo archivo de configuración y lo inicie.
Necesitas mirar Click Once Deployment .
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. Visual Studio proporciona soporte completo para publicar y actualizar aplicaciones implementadas con tecnología ClickOnce si ha desarrollado sus proyectos con Visual Basic y Visual C #.
Esto crea un archivo ejecutable de instalación que se carga en la web. El usuario ejecuta esto en su lugar o lo descarga y lo ejecuta. Esto incluye su código exe en el código que verificará la ubicación web (a la frecuencia que elija) para las actualizaciones. Si encuentra uno lo instalará para el usuario.
No tiene que hacer ningún cambio especial en su código para habilitar esto. más allá de incrementar el número de versión. Solo modifique y extienda su código como de costumbre, compile, genere, empaque y cargue.
Una cosa a tener en cuenta es que ClickOnce no admite la instalación de aplicaciones que requieren acceso administrativo:
La implementación de ClickOnce permite a los usuarios no administrativos instalar y otorga solo los permisos de seguridad de acceso al código necesarios para la aplicación.
Entonces, si su aplicación requiere acceso de nivel de administrador para ejecutar o incluso instalar, entonces no es la solución para usted.
No modificas tu actual .exe.
Se inicia un proceso separado que descarga una nueva versión del archivo. La nueva versión sustituye a la versión anterior. No se necesita modificación.
Normalmente el proceso es el siguiente:
- el usuario inicia la aplicacion
- la aplicación lanza un "actualizador" (otro programa)
- el actualizador se recupera de Internet si existe una versión más reciente
- Si ese es el caso, proponga al usuario actualizar
- los usuarios aceptan, el actualizador descarta el nuevo paquete de instalación (que puede ser incremental)
- el actualizador cierra la aplicación (o, mejor, le pide al usuario que lo haga) y ejecuta el nuevo instalador.
- El paquete de instalación hace el resto.
Por supuesto, puedes tener muchas variaciones, pero esta es la forma básica de hacerlo.
En Windows, al menos, algunos programas instalan un programa de actualización que siempre está encendido y comprueba si hay nuevas actualizaciones del software que cuida (GoogleUpdater, por ejemplo).
Para Windows (generalmente debido a que Windows bloquea el archivo .exe mientras se está ejecutando)
- El software determina que necesita actualizarse
- El software ejecuta el ejecutable de actualización empaquetado (en este punto, las salidas del software)
- Actualiza descargas de archivos requeridos en alguna carpeta temporal
- Actualización aplica parches
- Actualizar reinicia el software
Una idea: ¿podría tener una aplicación de carga que haga la comprobación por usted y luego, si es necesario, actualice el exe de la aplicación principal antes de iniciarla?
Una solución popular es tener un proceso separado que reemplace los archivos necesarios.
¿Alguna vez has notado que Firefox tiene que reiniciarse cada vez que se actualiza? Bueno, eso se debe a que un proceso separado (updater.exe) está descargando los archivos, cerrando Firefox, reemplazando los archivos y luego iniciando Firefox nuevamente.
Por supuesto, esto supone que está alojando una lista de actualizaciones en línea que el programa de actualización puede verificar (una fuente RSS o incluso un archivo de texto simple).