使用自己的服务器(通用提供程序)设置电子自动更新程序

时间:2019-10-21 23:15:31

标签: javascript electron auto-update electron-builder

我有自己的服务器,该服务器通过FTP上传了应用安装程序。名称为quickmargo Setup 1.0.0.exe,可从

获得。

https://quickmargo.pl/dist/download/quickmargo设置1.0.0.exe

我还通过FTP将latest.yml上传到了同一目录,并且可以在

使用

https://quickmargo.pl/dist/download/latest.yml

在我的index.js项目中,

import { autoUpdater } from 'electron-updater'

autoUpdater.setFeedURL('https://quickmargo.pl/dist/download');

autoUpdater.on('update-downloaded', () => {
    autoUpdater.quitAndInstall()
});

autoUpdater.on('update-available', (ev, info) => {
    alert('Update required!');
});

app.on('ready', async () => {
    if (process.env.NODE_ENV === 'production') {
        await autoUpdater.checkForUpdates()
    }
});

在package.json中,我有"version": "1.0.0",,在build:{}中,我有:

"win": {
  "icon": "build/icons/icon.ico",
  "publish": [{
    "provider": "generic",
    "url": "https://quickmargo.pl/dist/download"
  }]
},

(我不在乎其他平台)

现在让我们说我已经对我的应用程序进行了一些更改,并且我想上传版本1.0.1,并且如果有人已经下载了安装程序并将其安装在自己的计算机上,我希望我的应用程序自动更新。

请告诉我我到目前为止所做的一切都很好以及下一步是什么。我考虑如下:

    将package.json中的version更改为1.0.1
  • 再次在终端中运行构建命令
  • 将新安装程序手动上传到我服务器上的同一位置

修改

我完成了上述三个步骤,另外还上传了新的Latest.yml(版本1.0.1),结果是当我现在在其他PC上运行先前安装的版本(将新版本上传到服务器之前)1.0.0时,不会检测到我向服务器添加了1.0.1,也没有更新或显示任何弹出窗口或其他内容。我在做什么错了?

编辑2

我正在尝试自己解决它,现在我上传了1.0.2,所以现在下载应用程序的链接是:

https://quickmargo.pl/dist/download/quickmargo设置1.0.2.exe

编辑3

我试图自己解决问题,我在index.js中编辑了代码。我也在上面编辑过。 alert('Update required!');事件中的update-available从未发生。它应显示错误消息窗口,提示未定义警报。但是显然没有更新可用事件。


其他信息:

  • 我的应用是使用vue-electron v1.0.6样板生成的。
  • 我的电子更新程序版本为4.1.2
  • npm run build实际上从.electron-vue/build.js中的样板中调用了一些代码,您可以在上面的链接中看到此文件(例如,它将NODE_ENV设置为production。package.json中的脚本为:{{1} }。
  • 我不想在github上托管发行版,因为我的存储库是私有的,而且我看到 some information in electron.build docs我不应该这样做。
  • 我还看到了一些问题的信息,即我只能为发行版创建新的回购协议,但我认为将所有内容托管在自己的服务器上是一种更干净的方法。

1 个答案:

答案 0 :(得分:5)

我能够在文档之后使用generic的发布选项来设置自动更新配置,以前从未做过。因此它绝对可行,并且不需要通过证书进行签名,但是最初我遇到了问题,因为我在构建配置中设置了publisherName,但是没有证书。如果当前版本指定了发布者或证书,而新版本未指定,则也不会安装。

1。启用日志记录

您还可以通过安装electron-updater然后将记录器分配给electron-log来启用autoUpdater软件包的日志记录:

const log = require('electron-log');
autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = 'info';

默认输出路径为:

  • Linux: ~/.config/<app name>/log.log
  • macOS: ~/Library/Logs/<app name>/log.log
  • Windows: %USERPROFILE%\AppData\Roaming\<app name>\log.log

如果以下步骤不能解决您的问题,请发布日志内容。

2。不要拨打autoUpdater.setFeedURL()

official docs状态:

  

请勿致电setFeedURL。电子构建器会在app-update.yml的构建版本中自动为您创建resources文件(此文件是内部文件,您无需了解它)。

该URL已经在您的publish提供者对象中定义,足以供更新程序使用。另外,作为参数setFeedURL()的URL字符串不正确,it should be an options object。但同样,只需在publish提供程序中指定所有内容即可。

3。还将.blockmap文件上传到您的服务器

除了设置.exe文件外,还应在构建时创建这些文件。否则,您会在日志中看到错误,因为找不到旧版本和新版本的文件进行比较。

4。在您的更新服务器URL末尾添加斜杠

确保您的提供程序对象的url参数以斜杠结尾。尽管可能没有yml文件,但是在实际下载过程中可能会出现问题。

5。使用autoUpdater.checkForUpdatesAndNotify()

尝试更简单的方法

与其使用更灵活,也更复杂的方式来监听不同的更新事件并在您的应用程序中对其做出反应,请尝试使其首先与以下代码一起使用。一旦成功,您仍然可以返回处理不同的事件,以获得更好的用户体验。

app.on('ready', async () => {
  autoUpdater.checkForUpdatesAndNotify();
});

这将在后台检查并下载更新,并在您关闭应用程序后立即自动安装。将会弹出默认的Windows通知,以通知您有关可用更新和过程的信息。