跳到主要内容

autoUpdater

允许应用程序自动更新自身。

进程: 主进程

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

autoUpdater 是一个 EventEmitter

平台注意事项

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

此外,每个平台上都有一些细微的差异

macOS

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

注意: 您的应用程序必须在 macOS 上签名才能进行自动更新。这是 Squirrel.Mac 的要求。

Windows

在 Windows 上,您必须先将您的应用程序安装到用户的机器上,然后才能使用 autoUpdater,因此建议您使用 electron-winstallerElectron Forge 的 Squirrel.Windows 生成器来生成 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.Slackcom.squirrel.code.Code。您必须使用相同的 ID 通过 app.setAppUserModelId API 来设置您的应用程序,否则 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 Record<string, string> (可选) macOS - HTTP 请求标头。
    • serverType 字符串(可选)macOS - 可以是 jsondefault,有关详细信息,请参阅 Squirrel.Mac README。

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

autoUpdater.getFeedURL()

返回 string - 当前更新源 URL。

autoUpdater.checkForUpdates()

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

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

autoUpdater.quitAndInstall()

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

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

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