跳转到主内容

autoUpdater

使应用程序能够自动更新

进程:主进程

另见: 在应用程序中如何实现更新的详细指南.

autoUpdater is an EventEmitter.

跨平台提醒

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

此外,每个平台都有一些细微的差别:

macOS

在macOS上, autoUpdater模块建立在 Squirrel.Mac上,这意味着你不需要任何特殊的设置来使它工作。 对于服务器端要求, 你可以阅读 Server Support. Note that App Transport Security (ATS) applies to all requests made as part of the update process. 如需禁用ATS的应用程序可以在其应用程序的plist中添加 NSAllowsArbitraryLoads属性。

注意: 在 macOS 上,您的应用程序必须得到签名后方可自动更新。 这是 Squirrel.Mac 的要求。

Windows

On Windows, you have to install your app into a user's machine before you can use the autoUpdater, so it is recommended that you use electron-winstaller or Electron Forge's Squirrel.Windows maker to generate a Windows installer.

Apps built with Squirrel.Windows will trigger custom launch events that must be handled by your Electron application to ensure proper setup and teardown.

Squirrel.Windows apps will launch with the --squirrel-firstrun argument immediately after installation. During this time, Squirrel.Windows will obtain a file lock on your app, and autoUpdater requests will fail until the lock is released. In practice, this means that you won't be able to check for updates on first launch for the first few seconds. You can work around this by not checking for updates when process.argv contains the --squirrel-firstrun flag or by setting a 10-second timeout on your update checks (see electron/electron#7155 for more information).

The installer generated with Squirrel.Windows will create a shortcut icon with an Application User Model ID in the format of com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE, examples are com.squirrel.slack.Slack and com.squirrel.code.Code. 你应该在自己的应用中使用 app.setAppUserModelId API 方法设置相同的 API和ID,不然 Windows 将不能正确地把你的应用固定在任务栏上。

事件

autoUpdater 对象会触发以下的事件:

Event: 'error'

返回:

  • error Error

当更新发生错误的时候触发。

Event: 'checking-for-update'

当开始检查更新的时候触发。

Event: 'update-available'

当有可用更新的时候触发。 更新将自动下载。

Event: 'update-not-available'

当没有可用更新的时候触发。

Event: 'update-downloaded'

返回:

  • event Event
  • releaseNotes string
  • releaseName string
  • releaseDate Date
  • updateURL string

在更新下载完成的时候触发。

在 Windows 上只有 releaseName 是有效的。

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

Event: 'before-quit-for-update'

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

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

方法

autoUpdater 对象具有以下方法:

autoUpdater.setFeedURL(选项)

  • 选项 对象
    • url string
    • headers Record<string, string> (optional) macOS - HTTP request headers.
    • serverType string(可选) macOS - 可以是json 或者 default,查看 Squirrel.Mac 的README文件获取更多详细信息。

设置检查更新的 url,并且初始化自动更新。

autoUpdater.getFeedURL()

返回 string - 获取当前更新的 Feed 链接.

autoUpdater.checkForUpdates()

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

注意: 若更新可用将自动下载 调用 autoUpdater.checkForUpdates() 方法两次将下载更新两次

autoUpdater.quitAndInstall()

重启应用并在下载后安装更新。 它只应在发出 update-downloaded 后方可被调用。

在此机制下,调用 autoUpdater.quitAndInstall() 将首先关闭所有应用程序窗口,并且在所有窗口都关闭之后自动调用 app.quit()

注意: 严格来讲,执行一次自动更新不一定要调用此方法。因为下载更新文件成功之后,下次应用启动的时候会强制更新。