Tengo mi propio servidor donde cargué el instalador de la aplicación a través de FTP. Su nombre es quickmargo Setup 1.0.0.exe
y está disponible en
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe
También a través de FTP subí latest.yml
al mismo directorio y está disponible en
https://quickmargo.pl/dist/download/latest.yml
En mi proyecto en index.js tengo
import { autoUpdater } from 'electron-updater'
autoUpdater.setFeedURL('https://quickmargo.pl/dist/download');
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall()
});
autoUpdater.on('update-available', (ev, info) => {
alert('Update required!');
});
app.on('ready', async () => {
if (process.env.NODE_ENV === 'production') {
await autoUpdater.checkForUpdates()
}
});
En package.json tengo "version": "1.0.0",
y dentro build:{}
tengo:
"win": {
"icon": "build/icons/icon.ico",
"publish": [{
"provider": "generic",
"url": "https://quickmargo.pl/dist/download"
}]
},
(No me importan otras plataformas)
Ahora supongamos que he realizado algunos cambios en mi aplicación y quiero cargar la versión 1.0.1 y quiero que mi aplicación se actualice automáticamente si alguien ya descargó el instalador e instaló mi aplicación en su máquina.
Dime por favor si todo lo que hice hasta ahora está bien y cuál es el siguiente paso. Considero lo siguiente:
- cambiar
version
a1.0.1
en package.json - ejecutar el comando de compilación en la terminal nuevamente
- cargar manualmente un nuevo instalador al mismo lugar en mi servidor
Editar
Hice los tres pasos anteriores y también cargué el último latest.yml (con la versión 1.0.1) y el resultado es que cuando ahora ejecuto la versión 1.0.0 instalada previamente (antes de cargar la nueva versión en el servidor) en otra PC, entonces no lo hace detecta que agregué 1.0.1 al servidor y no se actualiza ni muestra alguna ventana emergente ni nada. ¿Qué estoy haciendo mal?
Editar 2
Estoy tratando de resolverlo por mi cuenta y ahora cargué 1.0.2, así que ahora el enlace para descargar la aplicación es:
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.2.exe
Editar 3
Estaba tratando de resolverlo por mi cuenta. Edité el código en index.js. Edité también arriba. alert('Update required!');
en update-available
caso de que nunca ocurra. Debería mostrarme la ventana de mensaje de error de que la alerta no está definida. Pero, aparentemente, el evento de actualización disponible nunca se emite.
Información adicional:
- Mi aplicación se generó con la placa de
v1.0.6
referencia vue-electron . - Mi versión de actualización electrónica es
4.1.2
npm run build
En realidad invocar algún código de texto modelo que está en.electron-vue/build.js
. se puede ver este archivo en el enlace de arriba (por ejemplo, se establece NODE_ENV a la producción de secuencias de comandos en package.json es:"build": "node .electron-vue/build.js && electron-builder",
.- No quiero alojar lanzamientos en github porque mi repositorio es privado y vi cierta información en electron.build docs que no debería hacer eso.
- También vi información en algún problema que podía crear un nuevo repositorio solo para lanzamientos, pero considero alojar todo en mi propio servidor como un enfoque más limpio.
fuente
electron-log
para darle al autoUpdater un registrador para usar (const logger = require("electron-log"); autoUpdater.logger = logger; logger.transports.file.level = "debug";
); esto debería imprimir información si su se encontró el servidor y si se encontró una actualización. Si obtiene un error, puede agregarlo a su pregunta.Respuestas:
Pude configurar una configuración de actualización automática usando una
generic
opción de publicación siguiendo los documentos, nunca antes lo había hecho. Por lo tanto, es definitivamente factible, y no requiere firma mediante un certificado, pero inicialmente tuve problemas porque había configuradopublisherName
la configuración de compilación, pero no tenía certificado. Si la versión actual tenía un editor o certificado especificado, y la nueva no, tampoco se instalará.1. Habilite el registro
Puede habilitar el registro del
electron-updater
paquete instalando tambiénelectron-log
y luego asignando el registrador aautoUpdater
:Las rutas de salida predeterminadas son:
~/.config/<app name>/log.log
~/Library/Logs/<app name>/log.log
%USERPROFILE%\AppData\Roaming\<app name>\log.log
Si los siguientes pasos no resuelven sus problemas, publique el contenido del registro.
2. No llames
autoUpdater.setFeedURL()
Los documentos oficiales dicen:
La URL ya está definida en su
publish
objeto de proveedor y eso es suficiente para que funcione el actualizador. Además, una cadena URL como argumento desetFeedURL()
es incorrecta, debe ser un objeto de opciones . Pero nuevamente,publish
es suficiente especificar todo en su proveedor.3. También suba los
.blockmap
archivos a su servidorEstos deben crearse al compilar, además de sus
.exe
archivos de configuración . De lo contrario, verá errores en su registro de que los archivos de la versión anterior y la nueva no se pudieron encontrar para comparar.4. Agregue una barra diagonal final a la URL de su servidor de actualización
Asegúrese de que el
url
parámetro de su objeto proveedor termine con una barra inclinada. Si bien el archivo yml todavía se puede encontrar sin él, de lo contrario puede haber problemas durante la descarga real.5. Pruebe el enfoque más simple usando
autoUpdater.checkForUpdatesAndNotify()
En lugar de utilizar la forma más flexible, pero también más complicada, de escuchar los diferentes eventos de actualización y reaccionar ante ellos dentro de su aplicación, primero intente que funcione con el siguiente código. Una vez que eso funcione, aún puede volver a manejar los diferentes eventos para una mejor experiencia de usuario.
Esto buscará y descargará la actualización en segundo plano y la instalará automáticamente tan pronto como cierre su aplicación. Aparecerá una notificación predeterminada de Windows para informarle sobre la actualización disponible y el procedimiento.
fuente
Full: 151,317.35 KB, To download: 1,152.69 KB (1%)
pero después de eso no sucede nada. La aplicación no se está actualizando. ¿Está seguro de quecheckForUpdatesAndNotify
es suficiente para cerrar la aplicación si encuentra una nueva versión, luego descargue la nueva versión e instálela?update-available
encendí algo de texto que puedo ver peroupdate-downloaded
nunca se emite, ya que no puedo ver el inicio de sesión en este evento. ¿Cuál podría ser la razón por la que no comienza / termina (tbh ni siquiera sé cuál) descargar?checkForUpdatesAndNotify
debería mostrar una notificación una vez que la descarga se realizó correctamente y luego la aplicación debería actualizarse una vez que la cierre. Pero si elupdate-downloaded
evento nunca se dispara, no llegarás tan lejos. Sin embargo, es difícil para mí decir qué está causando el problema.update-available
se emite peroupdate-downloaded
no se emite . No sé por qué todavía. Intentaré reproducirlo en un nuevo repositorio de emty.Cannot download differentially, fallback to full download: Error: Received data length 1527 is not equal to expected 634.
también intenta actualizarse después de salir de la aplicación y solicitar permiso de administrador. Y si no lo permito, puedo volver a ejecutar la aplicación con la versión anterior, que es un comportamiento que no quiero. Quiero obligar a los usuarios a instalar la actualización. Estoy usando autoUpdater.quitAndInstall () pero no se está cerrando.