我正在使用electron-builder和electron-updater 道路更新我的应用程序。
场景:我的应用程序在启动时会在一分钟内检查更新。在此之后,它每5小时检查一次更新。下载新更新时,我不会强迫我的用户安装应用程序。相反,更新后的应用程序将在应用退出时开始安装。我只是告诉他们,“一个新的更新是可用的”与“安装现在”按钮,以便他们可以更新,如果他们想(使用quitAndInstall),或当他们退出应用程序或在下一个开始。
下面是一些与电子更新相关的查询。
quitAndInstall并更新应用程序。安装程序-2.0.0.exe安装后仍在那里)。这是默认行为吗?它(或窗口)会在几天后删除这个下载的文件吗?我已经搜索过这件事了,但到现在还没有运气!!下面是一些版本的详细信息。
electron : 2.0.2、electron-builder : 20.15.1和electron-updater : 2.21.10
发布于 2018-06-15 07:00:21
这两个问题都在
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在电子生成器: 2.16.0中接受
问题:删除安装程序
(在电子生成器: 2.17.0中解决,检查问题#3000)
旧溶液
到目前为止,我发现没有任何内置的解决方案来删除安装程序,所以我已经创建了自己的解决方案来处理它。它可以通过
步骤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
}
}
}
}我们还可以设法删除多个安装程序。有关此解决方案的更多详细信息可在这里找到:- https://github.com/electron-userland/electron-builder/issues/3000#issuecomment-396833579
https://stackoverflow.com/questions/50744254
复制相似问题