Electron-updater自升级方案总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Electron-updater自升级方案总结相关的知识,希望对你有一定的参考价值。

参考技术A

通过electron-updater方案进行 全量 自升级方案图如下:

一、配置

在package.json文件中配置publish字段,用来生成latest.yml文件,该文件是用来判断版本升级的,在打包过程中生成。

一旦修改了latest.yml文件,则需要重新打包生成,否则更新失败。

这里也可以不配置url字段,在main.js中手动配置,使用autoUpdater.setFeedURL

方法配置即可

其中,在主进程download-progress事件的监测中返回的消息中可以取到如下信息

优点:

缺点:

Electron autoUpdate 应用程序使用 electron-updater 和 github 私有 repo

【中文标题】Electron autoUpdate 应用程序使用 electron-updater 和 github 私有 repo【英文标题】:Electron autoUpdate app using electron-updater with github private repo 【发布时间】:2021-12-18 04:09:35 【问题描述】:

我做了什么:我使用 electron-builder 打包了我的电子应用程序。我使用 electron forge typescript 和 webpack 模板来创建我的电子应用程序。

错误:在https://api.github.com/repos/OWNER/REPO/releases/assets/48643890"中找不到资产“app-setup-21.6.9.exe”

我认为问题可能与我在 github 上发布时构建文件的位置有关?

MAIN.JS

import  app, BrowserWindow, ipcMain  from 'electron';
import  autoUpdater  from "electron-updater";
const log = require('electron-log');


declare const MAIN_WINDOW_WEBPACK_ENTRY: string;
declare const MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: string;



const createWindow = (): void => 
  // Create the browser window.
  const mainWindow = new BrowserWindow(
    height: 650,
    width: 1200,
    webPreferences: 
      preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY,
    ,
  );

  // and load the index.html of the app.
  mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);



  autoUpdater.logger = log;
  log.info('App starting...');
  

  mainWindow.once('ready-to-show', () => 
    autoUpdater.checkForUpdatesAndNotify();

  );

  autoUpdater.on('update-available', () => 
    log.info("update-available");
    mainWindow.webContents.send('update_available');
  );

  autoUpdater.on('error', (ev, err) => 
    mainWindow.webContents.send('error', err);
    log.info(err);
);

autoUpdater.on('download-progress', (ev, progressObj) => 
  mainWindow.webContents.send('download-progress', progressObj);
)

  autoUpdater.on('update-downloaded', () => 
    log.info("update_downloaded");
    mainWindow.webContents.send('update_downloaded');
    autoUpdater.quitAndInstall();
  );


  // returns repos current Version 
  ipcMain.on('app_version', (event) => 

    log.info(app.getVersion());

    mainWindow.webContents.send('app_version',  version: 
    app.getVersion() );
  );


;

Main.js 日志

[info]  App starting...
[info]  Checking for update
[info]  Found version 21.6.9 (url: @cloudreign/app-setup-21.6.9.exe)
[info]  update-available
[info]  Downloading update from @cloudapp/app-setup-21.6.9.exe
[error] Error: Error: Cannot find asset "app-setup-21.6.9.exe" in: https://api.github.com/repos/<OWNER>/<REPO>/releases/assets/48643890"

【问题讨论】:

【参考方案1】:

在我的情况下,我的 package.json 文件中有一个 productName 密钥,其名称与 github 存储库不同。当我将其更改为与 GitHub 存储库相同的名称时,它起作用了。

【讨论】:

【参考方案2】:
autoUpdater.on('update-available', () => 
  log.info("update-available");
  autoUpdater.downloadUpdate() ;
);

您需要添加 autoUpdater.downloadUpdate() ;下载更新。

【讨论】:

以上是关于Electron-updater自升级方案总结的主要内容,如果未能解决你的问题,请参考以下文章

Electron autoUpdate 应用程序使用 electron-updater 和 github 私有 repo

electron-updater实现electron应用程序更新

使用electron-packager electron-builder electron-updater 打包vue项目,支持在线更新

vue+el-upload 上传图片和视频小总结

jstl 小总结 以及 jstl fn

导入电子更新程序时遇到问题