Электронный автообновитель, загружающий несколько сборок - PullRequest
0 голосов
/ 07 июня 2018

Я использую electron-builder и electron-updater way для обновления моего приложения.

Сценарий: Мое приложение проверяет наличие обновлений в течение минуты после запуска.После этого он проверяет наличие обновлений каждые 5 часов.Я не заставляю своих пользователей устанавливать приложение при загрузке нового обновления.Вместо этого установка обновленного приложения начнется во время выхода из приложения.Я просто показываю им, что «доступно новое обновление» с помощью кнопки «Установить сейчас», чтобы они могли обновить его, если захотят (используя quitAndInstall), или когда они выходят из приложения или при следующем запуске.

Ниже приведены некоторые запросы, связанные с электронным обновлением.

  • Я замечаю, что сборка загружается каждый раз.Допустим, если обновление доступно, загрузка нового обновления начнется через минуту, когда откроется приложение.Теперь новое приложение не установлено, поэтому через 5 часов оно снова проверит наличие обновлений.Версии не будут соответствовать друг другу, поэтому он начнет загружать обновления снова, даже если он уже загружен.Это поведение по умолчанию или я что-то упустил?Как я могу остановить это?Он использует и влияет как на данные моего клиента, так и на пропускную способность моего AWS!

  • При загрузке обновления.После того, как пользователь обновит приложение, его установщик все еще доступен и не удаляется.(Пример: - работает на версии 1.0.0, доступно обновление и обновление 2.0.0, запущено quitAndInstall и обновлено приложение. Программа установки-2.0.0.exe все еще там после установки).Это поведение по умолчанию?Удаляет ли он (или Windows) эти загруженные файлы через несколько дней?

Я искал эту вещь, но до сих пор не повезло !!Ниже приведены некоторые сведения о версии.

electron : 2.0.2, electron-builder : 20.15.1 и electron-updater : 2.21.10

1 Ответ

0 голосов
/ 15 июня 2018

Обе проблемы были решены в electron-builder: 2.17.0 и electron-updater: 2.23.0

После отладки в коде.Я нашел решение обеих моих проблем.

Проблема: Многократное скачивание

(Решено в Электроностроитель: 2.16.0 )

Старое решение

Я обнаружил, что electron-updater:2.21.10 уже имеет код, чтобы остановить загрузку снова, если этот установщик был загружен.Но каким-то образом сравнение объектов fileinfo с использованием lodash не работает, и это создает проблему.Так что пока мы не получим правильное решение в новой версии.Я изменил код ниже.

Файл: - ..\node_modules\electron-updater\out\DownloadedUpdateHelper.js

return (0, _lodash().default)(_this.versionInfo, versionInfo) && (0, _lodash().default)(_this.fileInfo, fileInfo) && (yield (0, _fsExtraP().pathExists)(updateFile));

Просто измените (_this.fileInfo, fileInfo) на (_this.fileInfo.info, fileInfo.info).Подробная информация доступна здесь: - https://github.com/electron-userland/electron-builder/issues/3003

Примечание: - (Я знаю, что изменение node_modules - не очень хороший способ, но это все, что я могу сделать в настоящее время, чтобы шоу продолжалось. У меня естьтакже представил PR для того же самого, поэтому все, что я жду, - это правильное решение)

Обновление: - PR принят в электронный строитель: 2.16.0


Проблема: Удаление установщика

(Решено в электронный строитель: 2.17.0 , проверить на наличие # 3000 )

Старое решение

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

Шаг 1: - Сохранить путь к файлу и версию только что загруженного файла в БД или где-нибудь в файле как объект JSON.

autoUpdater.on('update-downloaded', async (event) => {
    console.log("update-downloaded");
    let download_exe_obj = {path: autoUpdater.downloadedUpdateHelper._file, version: event.version};
    await update_downloaded_exe_data(download_exe_obj);// save download_exe_obj somewhere so that it can be used later on
});

Шаг 2: - Проверить текущую версию приложения с сохраненным JSON при запуске приложения (createWindow).Если мы обнаружили, что версия приложения совпадает с версией, сохраненной в json, мы можем удалить ранее загруженный установщик, так как этот установщик уже установлен.

const app = electron.app; //to get version and details from package.json
function createWindow() {
    mainWindow = new BrowserWindow({ width: 800, height: 600 })
    ...
    let available_exe_json = await get_downloaded_exe_data(); //get json from where you have saved
    if(available_exe_json != ''){
        let available_exe_obj = JSON.parse(available_exe_json);
        if (available_exe_obj.version != '' && available_exe_obj.version.toString() == app.getVersion().toString()) {
            //remove old installer
            if (available_exe_obj.path != '' && await fs.existsSync(available_exe_obj.path)) {
              await fs.unlinkSync(available_exe_obj.path);
              await update_downloaded_exe_data('');//update with blank where you have saved previous data
            }
        }
    }
}

Мы также можем удалить несколько установщиков.Более подробную информацию об этом решении можно найти здесь: - https://github.com/electron-userland/electron-builder/issues/3000#issuecomment-396833579

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