Desde ClickOnce
Migra ClickOnce a Velopack.
Esta es una guía relativamente poco probada escrita con comentarios de la comunidad. Si te has encontrado con algún problema que pueda mejorar la documentación, por favor envía un PR o una incidencia.
No es una migración sencilla, ya que las aplicaciones de clickonce son muy diferentes a Velopack. La descripción general del proceso a alto nivel es algo así:
- Publica una actualización de ClickOnce que descargue y ejecute tu aplicación de Velopack.
- Cuando la aplicación de Velopack se inicie, desinstala tu aplicación de ClickOnce.
Tu Primera Publicación de Velopack
Necesitaremos comenzar publicando tu primera versión de Velopack.
- Si estás usando alguna de las API de
ApplicationDeploymentpara comprobar actualizaciones, tendrás que eliminarlas. - Desactiva las actualizaciones de ClickOnce en la configuración de tu proyecto, luego abre manualmente el
.csprojy elimina todas las propiedades relacionadas con ClickOnce.tipSi todavía estás en el formato heredado de msbuild/csproj, deberías considerar migrar al proyecto de estilo SDK usando el dotnet/upgrade-assistant (La extensión de VS también es muy fácil de usar). Puedes continuar usando .Net Framework, y el formato heredado de csproj podría funcionar, sin embargo no es oficialmente compatible con Velopack, por lo que se recomienda una actualización.
- Sigue la guía QuickStart de C# de Velopack y/o revisa los ejemplos para añadir actualizaciones de Velopack a tu aplicación.
- Tu primera instalación de Velopack debería desinstalar tu aplicación de ClickOnce. Lo ideal sería simplemente ejecutar el desinstalador predeterminado, pero como no se puede usar de forma desatendida/silenciosa, necesitamos incluir el código de Wunder.ClickOnceUninstaller. Actualmente no se distribuye en NuGet, por lo que quizás quieras descargar e incluir el código directamente en tu proyecto.
- Una vez que
ClickOnceUninstalleresté añadido a tu proyecto, podemos añadir un hook de Velopack que desinstale tu aplicación de clickonce. A estas alturas ya deberías tenerVelopackAppen tu método principal, y tendrás que modificarlo para añadir el código de desinstalación de clickonce durante la instalación de Velopack:Asegúrate de probar este código de forma independiente para verificar que puede desinstalar tu aplicación de clickonce con éxito antes de continuar.VelopackApp.Build().OnAfterInstallFastCallback((appVersion) =>{var uninstallInfo = UninstallInfo.Find("Application Name");if (uninstallInfo != null){var uninstaller = new Uninstaller();uninstaller.Uninstall(uninstallInfo);}}).Run(); - 🎉 Compila tu aplicación y construye tu primera versión con
vpk pack. Deberías verYourAppSetup.exey algunos otros archivos. Ahora estamos listos para publicar una actualización de ClickOnce que descargue y ejecute el instalador de Velopack.
Tu Última Actualización de ClickOnce
El código de tu actualización final de ClickOnce solo instalará el YourAppSetup.exe que creamos en la sección anterior y será bastante sencillo.
- Probablemente querrás incluir
YourAppSetup.exeen tu aplicación como un recurso incrustado. - Al iniciar (por ejemplo, en el método
Main), quizás quieras mostrar un diálogo/mensaje al usuario para informarle de que estás a punto de migrar/actualizar la aplicación. - Luego, extrae
YourAppSetup.exea una ubicación temporal (por ejemplo, la carpeta de descargas del usuario) y ejecútalo. Si quieres que esto sea invisible, puedes añadir el argumentoYourAppSetup.exe --silent. De lo contrario, si omites este argumento, se le mostrará al usuario un diálogo de progreso. - Tan pronto como hayas ejecutado
YourAppSetup.exe, deberías cerrar tu aplicación, ya sea mediantereturn 0;desdeMain()o a través deEnvironment.Exit(0). Una vez que tu Velopack se haya instalado, eliminará esta aplicación.tipPara reducir el tamaño de tu aplicación de ClickOnce, quizás quieras eliminar cualquier código/dependencia sin usar en esta actualización. Dado que el único propósito de esta actualización es ejecutar el instalador de Velopack, cualquier código/dependencia que no cumpla este propósito es solo tiempo/retraso adicional para el usuario.