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.exey está disponible en
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe
También a través de FTP subí latest.ymlal 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
versiona1.0.1en 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-availablecaso 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.6referencia vue-electron . - Mi versión de actualización electrónica es
4.1.2 npm run buildEn 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-logpara 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
genericopció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 configuradopublisherNamela 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-updaterpaquete instalando tambiénelectron-logy 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.logSi 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
publishobjeto 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,publishes suficiente especificar todo en su proveedor.3. También suba los
.blockmaparchivos a su servidorEstos deben crearse al compilar, además de sus
.exearchivos 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
urlpará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 quecheckForUpdatesAndNotifyes suficiente para cerrar la aplicación si encuentra una nueva versión, luego descargue la nueva versión e instálela?update-availableencendí algo de texto que puedo ver peroupdate-downloadednunca 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?checkForUpdatesAndNotifydeberí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-downloadedevento nunca se dispara, no llegarás tan lejos. Sin embargo, es difícil para mí decir qué está causando el problema.update-availablese emite peroupdate-downloadedno 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.