跳至主要内容

autoUpdater

让应用能够自动更新自身。

进程:主进程

另请参阅:关于如何在应用中实现更新的详细指南

autoUpdater 是一个 EventEmitter

平台通知

目前,仅支持 macOS 和 Windows。Linux 上没有内置的自动更新程序支持,因此建议使用发行版的包管理器来更新你的应用。

此外,每个平台上还有一些细微的差别

macOS

在 macOS 上,autoUpdater 模块建立在 Squirrel.Mac 之上,这意味着你无需任何特殊设置即可使其工作。对于服务器端要求,你可以阅读 服务器支持。请注意,应用传输安全 (ATS) 适用于更新过程中发出的所有请求。需要禁用 ATS 的应用可以将 NSAllowsArbitraryLoads 键添加到其应用的 plist 中。

注意:你的应用必须针对 macOS 上的自动更新进行签名。这是 Squirrel.Mac 的要求。

Windows

在 Windows 上,你必须将应用安装到用户的机器中,然后才能使用 autoUpdater,因此建议你使用 electron-winstallerElectron Forgegrunt-electron-installer 包来生成 Windows 安装程序。

在使用 electron-winstallerElectron Forge 时,请确保不要在首次运行时尝试更新你的应用(还请参阅 此问题以获取更多信息)。还建议使用 electron-squirrel-startup 为你的应用获取桌面快捷方式。

使用 Squirrel 生成的安装程序将创建具有 应用程序用户模型 ID 的快捷方式图标,格式为 com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE,示例为 com.squirrel.slack.Slackcom.squirrel.code.Code。你必须对你的应用使用相同的 ID,并使用 app.setAppUserModelId API,否则 Windows 将无法在任务栏中正确固定你的应用。

与 Squirrel.Mac 类似,Windows 可以在 S3 或任何其他静态文件主机上托管更新。你可以阅读 Squirrel.Windows 的文档以获取有关 Squirrel.Windows 工作原理的更多详细信息。

事件

autoUpdater 对象会发出以下事件

事件:'error'

返回

  • error 错误

在更新时发生错误时发出。

事件:'checking-for-update'

在检查是否已开始更新时发出。

事件:'update-available'

在有可用更新时发出。更新会自动下载。

事件:'update-not-available'

当没有可用更新时发出。

事件:'update-downloaded'

返回

  • event 事件
  • releaseNotes 字符串
  • releaseName 字符串
  • releaseDate 日期
  • updateURL 字符串

当下载更新时发出。

仅在 Windows 上可用 releaseName

注意:处理此事件并不是严格必要的。成功下载的更新仍将在下次启动应用程序时应用。

事件:'before-quit-for-update'

此事件在用户调用 quitAndInstall() 后发出。

当调用此 API 时,在所有窗口关闭之前不会发出 before-quit 事件。因此,如果你希望在进程退出时在窗口关闭之前执行操作,则应监听此事件,并监听 before-quit

方法

autoUpdater 对象具有以下方法

autoUpdater.setFeedURL(options)

  • options 对象
    • url 字符串
    • headers 记录<字符串,字符串>(可选)macOS - HTTP 请求头。
    • serverType 字符串(可选)macOS - 可以是 jsondefault,有关更多信息,请参阅 Squirrel.Mac 自述文件。

设置 url 并初始化自动更新程序。

autoUpdater.getFeedURL()

返回 string - 当前更新源 URL。

autoUpdater.checkForUpdates()

询问服务器是否有更新。使用此 API 之前,必须调用 setFeedURL

注意:如果有可用的更新,它将自动下载。调用 autoUpdater.checkForUpdates() 两次将下载两次更新。

autoUpdater.quitAndInstall()

在下载更新后重新启动应用程序并安装更新。它只能在发出 update-downloaded 后调用。

在底层调用 autoUpdater.quitAndInstall() 将首先关闭所有应用程序窗口,并在所有窗口关闭后自动调用 app.quit()

注意:不必严格调用此函数来应用更新,因为成功下载的更新将在下次启动应用程序时始终应用。