Eu tenho meu próprio servidor onde carreguei o instalador de aplicativos via FTP. Seu nome é quickmargo Setup 1.0.0.exe
e está disponível em
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe
Também via FTP, enviei latest.yml
para o mesmo diretório e está disponível em
https://quickmargo.pl/dist/download/latest.yml
No meu projeto no index.js eu tenho
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()
}
});
No package.json eu tenho "version": "1.0.0",
e por dentro build:{}
tenho:
"win": {
"icon": "build/icons/icon.ico",
"publish": [{
"provider": "generic",
"url": "https://quickmargo.pl/dist/download"
}]
},
(Eu não me importo com outras plataformas)
Agora, digamos que eu fiz algumas alterações no meu aplicativo e quero fazer o upload da versão 1.0.1 e que ele seja atualizado automaticamente se alguém já tiver baixado o instalador e instalado o aplicativo em sua máquina.
Diga-me, por favor, se tudo o que fiz até agora está bom e qual é o próximo passo. Eu considero o seguinte:
- mude
version
para1.0.1
em package.json - execute o comando build no terminal novamente
- carregar manualmente o novo instalador no mesmo local no meu servidor
Editar
Eu fiz acima de três etapas e também fiz o upload do novo latest.yml (com a versão 1.0.1) e o resultado é que, quando agora executo a versão 1.0.0 instalada anteriormente (antes de fazer o upload da nova versão para o servidor) em outro PC, isso não acontece. detectar que eu adicionei 1.0.1 ao servidor e ele não atualiza ou mostra algum pop-up ou qualquer coisa. O que estou fazendo de errado?
Editar 2
Estou tentando resolvê-lo por conta própria e agora carreguei a versão 1.0.2. Agora, o link para baixar o aplicativo é:
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.2.exe
Editar 3
Eu estava tentando resolvê-lo por conta própria. Editei o código em index.js. Eu editei também acima. alert('Update required!');
no update-available
evento nunca ocorre. Deverá me mostrar a janela de mensagem de erro que o alerta não está definido. Mas, aparentemente, o evento disponível para atualização nunca é emitido.
Informação adicional:
- Meu aplicativo foi gerado com clichê vue-electron
v1.0.6
. - Minha versão do atualizador de elétrons é
4.1.2
npm run build
realmente invocar algum código clichê que está em.electron-vue/build.js
. Você pode ver este arquivo no link acima (por exemplo, definir NODE_ENV à produção Script em package.json é:"build": "node .electron-vue/build.js && electron-builder",
.- Eu não quero hospedar versões no github porque meu repositório é privado e vi algumas informações nos documentos electron.build que eu não deveria fazer isso.
- Também vi informações em algumas edições que eu poderia criar um novo repositório apenas para lançamentos, mas considero hospedar tudo no meu próprio servidor como uma abordagem mais limpa.
fonte
electron-log
para fornecer ao autoUpdater um logger para usar (const logger = require("electron-log"); autoUpdater.logger = logger; logger.transports.file.level = "debug";
) - isso deve imprimir informações se o seu servidor foi encontrado e se uma atualização foi encontrada. Se você receber um erro, poderá adicioná-lo à sua pergunta.Respostas:
Consegui definir uma configuração de atualização automática usando uma
generic
opção de publicação após os documentos, nunca tendo feito isso antes. Portanto, é definitivamente factível e não requer assinatura por meio de um certificado, mas eu inicialmente tive problemas porque havia definidopublisherName
na configuração da compilação, mas nenhum certificado. Se a versão atual tiver um editor ou certificado especificado e a nova não, ela também não será instalada.1. Ative o log
Você pode habilitar o log do
electron-updater
pacote instalandoelectron-log
e atribuindo o logger aoautoUpdater
:Os caminhos de saída padrão são:
~/.config/<app name>/log.log
~/Library/Logs/<app name>/log.log
%USERPROFILE%\AppData\Roaming\<app name>\log.log
Se as etapas a seguir não resolverem seus problemas, publique o conteúdo do log.
2. Não ligue
autoUpdater.setFeedURL()
Os documentos oficiais declaram:
A URL já está definida no
publish
objeto do provedor e é suficiente para o atualizador trabalhar. Além disso, uma string de URL como argumento desetFeedURL()
está incorreta, deve ser um objeto de opções . Mas, novamente, especificar tudo em seupublish
provedor é suficiente.3. Carregue também os
.blockmap
arquivos no seu servidorEles devem ser criados na compilação, além da sua configuração
.exe
arquivos de . Caso contrário, você verá erros no seu log de que os arquivos da versão antiga e nova não foram encontrados para comparação.4. Adicione uma barra final à URL do servidor de atualização
Verifique se o
url
parâmetro do seu objeto provedor termina com uma barra. Embora o arquivo yml ainda possa ser encontrado sem ele, pode haver problemas durante o download real, caso contrário.5. Tente a abordagem mais simples usando
autoUpdater.checkForUpdatesAndNotify()
Em vez de usar a maneira mais flexível, mas também mais complicada, de escutar os diferentes eventos de atualização e reagir a eles no seu aplicativo, tente fazê-lo funcionar primeiro com o código a seguir. Quando isso funcionar, você ainda poderá voltar a manipular os diferentes eventos para obter uma melhor experiência do usuário.
Isso irá verificar e baixar a atualização em segundo plano e instalá-la automaticamente assim que você fechar o aplicativo. Uma notificação padrão do Windows será exibida para informá-lo sobre a atualização disponível e o procedimento.
fonte
Full: 151,317.35 KB, To download: 1,152.69 KB (1%)
mas depois disso nada acontece .. O aplicativo não está atualizando. Tem certeza de quecheckForUpdatesAndNotify
é suficiente para fazer com que o aplicativo seja encerrado se encontrar uma nova versão, faça o download da nova versão e a instale?update-available
seguida, registro algum texto que posso ver, masupdate-downloaded
nunca é emitido, pois não consigo ver o logon neste evento. Qual pode ser o motivo pelo qual ele não inicia / termina (nem sei qual) o download?checkForUpdatesAndNotify
deve mostrar uma notificação assim que o download foi bem-sucedido e o aplicativo deve ser atualizado assim que você o fechar. Mas se oupdate-downloaded
evento nunca for acionado, você não chegará tão longe. No entanto, é difícil para mim dizer o que está causando o problema.update-available
é emitido, masupdate-downloaded
não é. Ainda não sei porque. Vou tentar reproduzi-lo, novo repositório emty.Cannot download differentially, fallback to full download: Error: Received data length 1527 is not equal to expected 634.
Também tenta atualizar após a saída do aplicativo e solicita permissão de administrador. E se eu não permitir, posso executar o aplicativo novamente com a versão anterior, que é um comportamento que eu não quero. Quero forçar os usuários a instalar a atualização. Estou usando o autoUpdater.quitAndInstall (), mas não está saindo.