【发布时间】:2020-02-18 01:43:33
【问题描述】:
我有自己的服务器,通过 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!'); on update-available 事件从未发生。它应该向我显示警报未定义的错误消息窗口。但显然 update-available 事件永远不会发出。
附加信息:
- 我的应用是使用 vue-electron
v1.0.6样板生成的。 - 我的电子更新版本是
4.1.2 -
npm run build实际上从.electron-vue/build.js中的样板代码中调用了一些代码,您可以在上面的链接中看到这个文件(例如,它将 NODE_ENV 设置为生产。package.json 中的脚本是:"build": "node .electron-vue/build.js && electron-builder",。 - 我不想在 github 上托管发布,因为我的存储库是私有的,我看到 some information in electron.build docs 我不应该这样做。
- 我还看到一些问题中的信息,我可以仅为发布创建新的存储库,但我认为将所有内容托管在我自己的服务器上是更干净的方法。
【问题讨论】:
-
这里有一个例子:github.com/iffy/electron-updater-example 涵盖“自定义”更新
-
那我做错了什么?
-
通过 cmd 运行打包的应用程序以查看日志,在问题中包含这些可能会有所帮助
-
我需要用证书签署应用程序才能正确运行自动更新吗?
-
@dopeCode 不,自动更新应该在没有代码签名的情况下工作,如果您在终端中启动构建的 exe 后没有看到任何错误,请使用像
electron-log这样的记录器给自动更新器一个记录器使用 (const logger = require("electron-log"); autoUpdater.logger = logger; logger.transports.file.level = "debug";) - 如果找到您的服务器以及是否找到更新,这应该打印出信息。如果您遇到错误,可以将其添加到您的问题中。
标签: javascript electron auto-update electron-builder