Настройка автообновления Electron с собственным сервером - PullRequest
4 голосов
/ 22 октября 2019

У меня есть свой собственный сервер, на который я загрузил установщик приложения через FTP. Его имя quickmargo Setup 1.0.0.exe и оно доступно в

https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe

Также через FTP я загрузил latest.yml в тот же каталог, и он доступен на

https://quickmargo.pl/dist/download/latest.yml

В моем проекте в index.js у меня есть

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()
    }
});

В package.json у меня есть "version": "1.0.0", и внутри build:{} У меня есть:

"win": {
  "icon": "build/icons/icon.ico",
  "publish": [{
    "provider": "generic",
    "url": "https://quickmargo.pl/dist/download"
  }]
},

(меня не волнуют другие платформы)

Теперь предположим, что я внес некоторые изменения в свое приложение и хочу загрузить версию 1.0.1, и я хочу, чтобыприложение для автоматического обновления, если кто-то уже скачал установщик и установил мое приложение на своем компьютере.

Скажите, пожалуйста, все ли, что я сделал до сих пор, в порядке и каков следующий шаг. Я считаю следующее:

  • изменить version на 1.0.1 в package.json
  • снова запустить команду сборки в терминале
  • загрузить новый установщик вручную в то же местона моем сервере

Редактировать

Я сделал выше три шага, плюс я также загрузил новый latest.yml (с версией 1.0.1), и в результате, когдаТеперь я запускаю ранее установленную (перед загрузкой новой версии на сервер) версию 1.0.0 на другом ПК, затем он не обнаруживает, что я добавил 1.0.1 на сервер, и не обновляет и не отображает всплывающее окно или что-то еще. Что я делаю не так?

Редактировать 2

Я пытаюсь решить это самостоятельно, и теперь я загрузил 1.0.2, так что теперь ссылка для загрузки приложенияis:

https://quickmargo.pl/dist/download/quickmargo Setup 1.0.2.exe

Edit 3

Я пытался решить ее самостоятельно Iотредактированный код в index.js. Я редактировал также выше. alert('Update required!'); на update-available событие никогда не происходит. Должно появиться окно с сообщением об ошибке, оповещение не определено. Но, по-видимому, доступное для обновления событие никогда не генерируется.


Дополнительная информация:

  • Мое приложение было сгенерировано с помощью vue-electronic v1.0.6 шаблон.
  • Моя версия электронного обновления - 4.1.2
  • npm run build фактически вызывает некоторый код из шаблона, который находится в .electron-vue/build.js, вы можете увидеть этот файл по ссылке выше (например, он установил NODE_ENVСценарий в package.json: "build": "node .electron-vue/build.js && electron-builder",.
  • Я не хочу размещать релизы на github, потому что мой репозиторий является частным, и я увидел некоторую информацию в файле Electron.build что я не должен этого делать.
  • Я также видел в некоторых выпусках информацию о том, что я могу создать новое репо только для релизов, но я считаю размещение всего на своем собственном сервере более чистым подходом.

1 Ответ

1 голос
/ 01 ноября 2019

Я смог настроить автообновление конфигурации, используя опцию generic oublish, следуя документам, еще никогда не делая этого. Таким образом, это определенно выполнимо, и это не требует подписи через сертификат, но у меня первоначально были проблемы, потому что я установил publisherName в конфигурации сборки, но не сертификат. Если в текущей версии указан издатель или сертификат, а в новой - нет, он также не будет установлен.

1. Включить ведение журнала

Вы можете включить ведение журнала пакета electron-updater, также установив electron-log, а затем назначив регистратор для autoUpdater:

const log = require('electron-log');
autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = 'info';

Выход по умолчаниюпути:

  • Linux: ~/.config/<app name>/log.log
  • macOS: ~/Library/Logs/<app name>/log.log
  • Windows: %USERPROFILE%\AppData\Roaming\<app name>\log.log

Если следующие действия не помогли решить проблему, опубликуйте содержимое журнала.

2. Не звоните autoUpdater.setFeedURL()

Официальные документы :

Не звоните setFeedURL . Electron-Builder автоматически создает файл app-update.yml для вас при сборке в resources (этот файл является внутренним, вам не нужно об этом знать).

URL-адрес уже определенв вашем publish объекте провайдера, и этого достаточно для работы программы обновления. Кроме того, строка URL в качестве аргумента setFeedURL() является неправильной, это должен быть объект параметров . Но опять же, достаточно указать все в вашем publish proovider.

3. Также загрузите файлы .blockmap на ваш сервер

Они должны быть созданы при сборке в дополнение к файлам .exe установки. В противном случае вы увидите в своем журнале ошибки, что файлы старой и новой версии не найдены для сравнения.

4. Попробуйте более простой подход, используя autoUpdater.checkForUpdatesAndNotify()

Вместо использования более гибкого, но и более сложного способа прослушивания различных событий обновления и реагирования на них в вашем приложении, попытайтесь заставить его работать сследующий код сначала. Как только это сработает, вы все равно можете вернуться к обработке различных событий для лучшего взаимодействия с пользователем.

app.on('ready', async () => {
  autoUpdater.checkForUpdatesAndNotify();
});

Это позволит проверить и загрузить обновление в фоновом режиме и автоматически установить его, как только вы закроетеприложение. Появится уведомление Windows по умолчанию, информирующее вас о доступном обновлении и процедуре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...