autoUpdater
使应用能够自动更新。
进程:主进程
另请参阅:关于如何在应用中实现更新的详细指南。
autoUpdater
是一个 EventEmitter。
平台注意事项
目前仅支持 macOS 和 Windows。 Linux 上没有内置的自动更新支持,因此建议使用分发版的包管理器来更新你的应用。
此外,不同平台之间存在一些细微差异
macOS
在 macOS 上,autoUpdater
模块基于 Squirrel.Mac 构建,这意味着你无需进行任何特殊设置即可使其工作。 对于服务器端要求,你可以阅读 服务器支持。请注意,App Transport Security (ATS) 适用于更新过程中的所有请求。 需要禁用 ATS 的应用可以将其应用的 plist 中添加 NSAllowsArbitraryLoads
键。
注意:你的应用在 macOS 上必须签名才能进行自动更新。这是 Squirrel.Mac
的要求。
Windows
在 Windows 上,在使用 autoUpdater
之前必须将你的应用安装到用户的机器上,因此建议你使用 electron-winstaller 或 Electron Forge 的 Squirrel.Windows maker 来生成 Windows 安装程序。
使用 Squirrel.Windows 构建的应用将触发 自定义启动事件,你的 Electron 应用必须处理这些事件以确保正确的设置和拆卸。
Squirrel.Windows 应用在安装后会立即使用 --squirrel-firstrun
参数启动。在此期间,Squirrel.Windows 会对你的应用获取文件锁,并且 autoUpdater
请求会失败,直到锁被释放。 实际上,这意味着首次启动时,你在最初几秒钟内将无法检查更新。 你可以通过在 process.argv
包含 --squirrel-firstrun
标志时不检查更新,或者在更新检查上设置 10 秒超时来解决这个问题 (有关更多信息,请参阅 electron/electron#7155)。
使用 Squirrel.Windows 生成的安装程序将创建一个带有 应用程序用户模型 ID 的快捷方式图标,格式为 com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE
,例如 com.squirrel.slack.Slack
和 com.squirrel.code.Code
。 你必须使用 app.setAppUserModelId
API 为你的应用设置相同的 ID,否则 Windows 将无法正确地将你的应用固定到任务栏。
事件
autoUpdater
对象触发以下事件:
事件:'error'
返回
error
错误
更新时发生错误时触发。
事件:'checking-for-update'
开始检查可用更新时触发。
事件:'update-available'
有可用更新时触发。更新会自动下载。
事件:'update-not-available'
没有可用更新时触发。
事件:'update-downloaded'
返回
event
事件releaseNotes
stringreleaseName
stringreleaseDate
DateupdateURL
string
更新下载完成时触发。
仅在 Windows 上可用 releaseName
。
注意:不一定需要处理此事件。 成功下载的更新仍将在应用下次启动时应用。
事件:'before-quit-for-update'
此事件在用户调用 quitAndInstall()
后触发。
调用此 API 时,在所有窗口关闭之前不会触发 before-quit
事件。因此,如果希望在进程退出、窗口关闭之前执行操作,除了监听 before-quit
外,还应该监听此事件。
方法
autoUpdater
对象有以下方法:
autoUpdater.setFeedURL(options)
设置 url
并初始化自动更新器。
autoUpdater.getFeedURL()
返回 string
- 当前的更新源 URL。
autoUpdater.checkForUpdates()
询问服务器是否有更新。 使用此 API 之前,必须先调用 setFeedURL
。
注意:如果有可用更新,它会自动下载。 调用两次 autoUpdater.checkForUpdates()
将下载更新两次。
autoUpdater.quitAndInstall()
重新启动应用并在下载更新后安装更新。 仅应在触发 update-downloaded
事件后调用此方法。
在底层,调用 autoUpdater.quitAndInstall()
会先关闭所有应用窗口,并在所有窗口关闭后自动调用 app.quit()
。
注意:应用更新不一定需要调用此函数,因为成功下载的更新总会在应用下次启动时应用。