Обе проблемы были решены в 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