gpt4 book ai didi

javascript - 使用自己的服务器(通用提供商)设置 Electron 自动更新程序

转载 作者:行者123 更新时间:2023-12-01 22:48:21 25 4
gpt4 key购买 nike

我有自己的服务器,我通过 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 中的版本更改为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!'); on update-available 事件从未发生。它应该向我显示警报未定义的错误消息窗口。但显然更新可用事件从未发出。

<小时/>

其他信息:

  • 我的应用程序是使用 vue-electron 生成的v1.0.6 样板文件。
  • 我的 Electron 更新程序版本是 4.1.2
  • npm run build 实际上从 . Electron-vue/build.js 中的样板代码调用一些代码,您可以在上面的链接中看到这个文件(例如它设置NODE_ENV 到生产环境。package.json 中的脚本为:"build": "node . Electron-vue/build.js && electro-builder",
  • 我不想在 github 上托管版本,因为我的存储库是私有(private)的,并且我看到 some information in electron.build docs我不应该那样做。
  • 我还在某些问题中看到了信息,我只能为版本创建新的存储库,但我认为将所有内容托管在我自己的服务器上作为更干净的方法。

最佳答案

我能够使用 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状态:

Do not call setFeedURL. electron-builder automatically creates app-update.yml file for you on build in the resources (this file is internal, you don’t need to be aware of it).

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

<强>3。同时上传.blockmap文件到您的服务器

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

<强>4。在更新服务器 URL 中添加尾部斜杠

确保url提供程序对象的参数以斜杠结尾。虽然在没有它的情况下仍然可以找到 yml 文件,但否则在实际下载过程中可能会出现问题。

<强>5。使用 autoUpdater.checkForUpdatesAndNotify() 尝试更简单的方法

不要使用更灵活但也更复杂的方式监听不同的更新事件并在应用程序中对它们使用react,而是首先尝试让它与以下代码一起使用。一旦生效,您仍然可以返回处理不同的事件以获得更好的用户体验。

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

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

关于javascript - 使用自己的服务器(通用提供商)设置 Electron 自动更新程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58495256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com