Desde Squirrel
Migra desde Squirrel.Windows o Clowd.Squirrel a Velopack.
Estos son los pasos generales necesarios:
-
Reemplaza el paquete nuget
Squirrel.WindowsoClowd.Squirrelcon el último Paquete NuGet de Velopack. -
Instala la herramienta de línea de comandos
vpk, ya que es la que usarás para compilar versiones de Velopack.dotnet tool install -g vpktipAsegúrate de usar la misma versión de vpk y del paquete de Velopack; esta es la única configuración oficialmente compatible.
Alternativamente, puedes ejecutar
vpksin instalarlo globalmente usando el comandodnx:dnx vpk --version 1.0.0Reemplaza
1.0.0con la versión del paquete de Velopack que estás usando en tu aplicación. -
Necesitarás reemplazar
Squirrel.SquirrelAwareAppal comienzo de tu aplicación porVelopack.VelopackApp.Build().Run().Los accesos directos [Leer más] y las entradas del registro se gestionan automáticamente en Velopack, por lo que si actualmente lo estás haciendo en los hooks de
SquirrelAwareApp, deben eliminarse. Por ejemplo, si tus hooks eran así antes:public static void Main(string[] args){SquirrelAwareApp.HandleEvents(onInitialInstall: OnAppInstall,onAppUninstall: OnAppUninstall,onEveryRun: OnAppRun);}private static void OnAppInstall(SemanticVersion version, IAppTools tools){tools.CreateShortcutForThisExe(ShortcutLocation.StartMenu | ShortcutLocation.Desktop);}private static void OnAppUninstall(SemanticVersion version, IAppTools tools){tools.RemoveShortcutForThisExe(ShortcutLocation.StartMenu | ShortcutLocation.Desktop);}private static void OnAppRun(SemanticVersion version, IAppTools tools, bool firstRun){if (firstRun) MessageBox.Show("Thanks for installing my application!");}Luego migrarías al siguiente código, eliminando los hooks de accesos directos:
public static void Main(string[] args){// Thank the user for installing the app on first run.// Note that the MessageBox class below comes from WinForms or WPF.VelopackApp.Build().OnFirstRun(v => MessageBox.Show("Thanks for installing my application!")).Run();} -
Los hooks de Velopack ya no admiten la creación manual de accesos directos. En su lugar, estos se crean/eliminan automáticamente como parte del instalador.
-
Velopack requiere que la aplicación se reinicie para aplicar las actualizaciones. Las API anteriores aplicaban las actualizaciones descargadas antes de desencadenar el reinicio.
-
El concepto de
SquirrelAwareAppya no existe, por lo que si has añadido atributos, entradas en el manifiesto del ensamblado u otros archivos para indicar que tu binario es «consciente», puedes eliminarlos. Cada paquete de Velopack tiene exactamente un binario "VelopackApp", que debe implementar el código anterior al comienzo deMain. De forma predeterminada, Velopack buscará un binario en{packDir}\{packId}.exe. Si tu exe principal de VelopackApp tiene un nombre diferente, debes proporcionarlo con el argumento--mainExe yourApp.exe. -
El archivo "RELEASES" ya no es un formato que usa Velopack, pero se generará uno al compilar paquetes en Windows con el canal predeterminado (es decir, sin argumento de canal). En su lugar, Velopack producirá archivos
releases.{channel}.json, que deben tratarse de la misma manera. Si deseas que una aplicación de Windows heredada migre a Velopack, debes publicar una versión (omitiendo el argumento--channel) y subir tanto el archivoRELEASEScomo el archivoreleases.win.jsonque produce Velopack a tu fuente de actualización. -
En general, la línea de comandos admite todas las mismas funciones, pero los nombres de los argumentos o comandos pueden haber cambiado. Velopack ya no admite el uso de un
.nupkgcreado por dotnet o nuget.exe. En su lugar, debes compilar/publicar tu aplicación y proporcionar la salida del compilador avpk pack. Un ejemplo muy sencillo podría ser el siguientedotnet publish --self-contained -r win-x64 -o publishvpk pack -u YourAppId -v 1.0.0 -p publish -e yourMainBinary.exeConsulta la ayuda de la línea de comandos de vpk para más detalles:
vpk -h -
En tu aplicación instalada ya no existen carpetas
app-1.0.0, y en una aplicación recién instalada no habrá unYourApp.exeen la raíz de la aplicación. Cambiar la ruta de la aplicación (p. ej., app-1.0.0 y app-1.0.1) como lo hace Squirrel es muy perjudicial, ya que rompe muchas cosas en Windows: reglas de firewall, problemas con antivirus, preferencias de GPU, anclaje de iconos en la bandeja del sistema y más. Mantener la ubicación del exe en la misma posición después de cada actualización soluciona muchos problemas, por lo que Velopack siempre almacenará tu programa en{root}\current\YourApp.exe. La primera vez que tu aplicación Squirrel descarga una actualización de Velopack, el actualizador de Velopack realizará una migración de la aplicación: buscará accesos directos en todas las ubicaciones habituales/predeterminadas y los limpiará/reparará para que apunten a la nueva ubicación. Si anteriormente tenías asociaciones de archivos o accesos directos fuera de las ubicaciones predeterminadas que apuntaban a{root}\YourApp.exe, estos deberán actualizarse, ya que ese archivo ya no existirá en las nuevas instalaciones.
Diferencias de API con Clowd.Squirrel
Esta lista no es exhaustiva y puede cambiar con el tiempo. Si tienes una pregunta específica, por favor pregunta en el Discord de Velopack. Para muchos de estos, una simple búsqueda/reemplazo en tu base de código debería ser suficiente; sin embargo, estas son solo pautas y debes revisar la referencia de la API de C# para conocer las firmas exactas y el comportamiento de las API de reemplazo.
- La clase
ReleaseEntryes reemplazada porVelopackAsset UpdateManagerya no es desechable. Elimina cualquier declaraciónusing.- La propiedad
UpdateManager.IsInstalledApppasa a llamarseUpdateManager.IsInstalled - El método
UpdateManager.CheckForUpdate()pasa a llamarseUpdateManager.CheckForUpdatesAsync() UpdateInfo.CurrentlyInstalledVersiones reemplazado por la comprobación deUpdateInfo.BaseReleaseUpdateInfo.ReleasesToApplyya no existe; dependiendo de tu uso, se reemplaza porUpdateInfo.TargetFullReleaseoUpdateInfo.DeltasToTargetUpdateInfo.FutureReleaseEntryes reemplazado porUpdateInfo.TargetFullReleaseUpdateInfo.Create()ya no existe, usa el constructor directamentenew UpdateInfo()UpdateManager.DownloadReleases()es reemplazado porUpdateManager.DownloadUpdatesAsync()