Electron自动更新程序下载多个版本
我正在使用Electron自动更新程序下载多个版本,electron,electron-builder,Electron,Electron Builder,我正在使用electron-builder和electron-updater更新我的应用程序 场景: 我的应用程序在启动后一分钟内检查更新。之后,它每5小时检查一次更新。我不会在下载新更新时强制用户安装应用程序。而是在应用程序退出时开始安装更新的应用程序。我只是向他们展示了带有“立即安装”按钮的“新更新可用”,以便他们可以在需要时(使用退出和安装)或在退出应用程序或下次启动时进行更新 下面是一些与electron updater相关的查询 我注意到构建每次都会下载。比方说,如果有更新可用,那么
electron-builder
和electron-updater
更新我的应用程序
场景:
我的应用程序在启动后一分钟内检查更新。之后,它每5小时检查一次更新。我不会在下载新更新时强制用户安装应用程序。而是在应用程序退出时开始安装更新的应用程序。我只是向他们展示了带有“立即安装”按钮的“新更新可用”,以便他们可以在需要时(使用退出和安装
)或在退出应用程序或下次启动时进行更新
下面是一些与electron updater相关的查询
- 我注意到构建每次都会下载。比方说,如果有更新可用,那么当应用程序打开时,新更新的下载将在一分钟内开始。现在没有安装新的应用程序,因此5小时后它将再次检查新的更新。版本将不匹配,因此即使已下载更新,也会再次开始下载更新。这是默认行为还是我遗漏了什么?我怎样才能阻止这种事情发生?它使用并影响我客户的数据和我的AWS带宽
- 下载更新时。用户更新应用程序后,其安装程序仍然可用,且未被删除。(例如:-在版本1.0.0上运行,2.0.0的更新可用并已下载,触发
并更新了应用程序。安装程序-2.0.0.exe在安装后仍然存在)。这是默认行为吗?它(或windows)是否在几天后删除此下载的文件退出并安装
electron:2.0.2
,electron-builder:20.15.1
和electron-updater:2.21.10
这两个问题都已在electron-builder:2.17.0
和electron-updater:2.23.0
在调试了这么多代码之后。我找到了解决这两个问题的办法
问题:多次下载
(在中解决)
旧解决方案
我发现electron-updater:2.21.10
已经有了一个代码,如果安装程序已经被下载,它将再次停止下载。但不知何故,使用lodash
比较fileinfo
的对象是不起作用的,这会产生问题。所以,直到我们在新版本中找到合适的解决方案。我已更改以下代码
文件:-。\node\u modules\electron updater\out\downloadeUpdateHelper.js
return (0, _lodash().default)(_this.versionInfo, versionInfo) && (0, _lodash().default)(_this.fileInfo, fileInfo) && (yield (0, _fsExtraP().pathExists)(updateFile));
只需将(\u this.fileInfo,fileInfo)
更改为(\u this.fileInfo.info,fileInfo.info)
。详情请参阅:
注:-(我知道更换node_模块不是一个好办法,但这是我目前所能做的一切,以保持节目继续进行。我还提交了相同的PR,所以我等待的是一个适当的解决方案)
更新:-在中接受PR
问题:删除安装程序 (在中解决,检查问题) 旧解决方案 我发现目前还没有任何内置的解决方案来删除安装程序,所以我创建了自己的解决方案来处理它。这可以通过以下方式实现: 第1步:- 将新下载文件的文件路径和版本保存到DB或文件中的某个位置作为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
}
}
}
}
我们还可以设法删除多个安装程序。有关此解决方案的更多详细信息,请参见: