autoUpdater
启用应用程序自动更新。
进程: 主进程
更多信息请参阅:关于如何在您的应用程序中实现更新的详细指南。
autoUpdater 是一个 EventEmitter。
平台须知
目前,仅支持 macOS 和 Windows。Linux 上没有内置的自动更新程序支持,因此建议使用发行版的包管理器来更新您的应用程序。
此外,每个平台之间也存在一些细微的差异
macOS
在 macOS 上,autoUpdater 模块建立在 Squirrel.Mac 之上,这意味着您无需任何特殊设置即可使其工作。有关服务器端要求,您可以阅读 服务器支持。请注意,App Transport Security (ATS) 适用于更新过程中的所有请求。需要禁用 ATS 的应用程序可以将 NSAllowsArbitraryLoads 键添加到其应用程序的 plist 文件中。
您的应用程序必须在 macOS 上进行签名才能进行自动更新。这是 Squirrel.Mac 的要求。
Windows
在 Windows 上,您必须先将应用程序安装到用户的机器上,然后才能使用 autoUpdater,因此建议您使用 electron-winstaller 或 Electron Forge 的 Squirrel.Windows 生成器 来生成 Windows 安装程序。
使用 Squirrel.Windows 构建的应用程序将触发 自定义启动事件,您的 Electron 应用程序必须处理这些事件以确保正确的设置和清理。
Squirrel.Windows 应用程序在安装后会立即使用 --squirrel-firstrun 参数启动。在此期间,Squirrel.Windows 将在您的应用程序上获取文件锁,并且在释放锁之前 autoUpdater 请求将失败。实际上,这意味着您无法在首次启动的前几秒内检查更新。您可以通过在 process.argv 包含 --squirrel-firstrun 标志时,或者通过为您的更新检查设置 10 秒超时(有关更多信息,请参见 electron/electron#7155)来解决此问题。
使用 Squirrel.Windows 生成的安装程序将创建一个快捷方式图标,其中包含格式为 com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE 的 应用程序用户模型 ID,例如 com.squirrel.slack.Slack 和 com.squirrel.code.Code。您必须使用相同的 ID 与 app.setAppUserModelId API 一起使用您的应用程序,否则 Windows 将无法正确地将您的应用程序固定在任务栏中。
事件
autoUpdater 对象会发出以下事件
事件: 'error'
返回
error错误
在更新时发生错误时发出。
事件: 'checking-for-update'
在开始检查可用更新时发出。
事件: 'update-available'
当有可用更新时发出。更新会自动下载。
事件: 'update-not-available'
当没有可用更新时发出。
事件: 'update-downloaded'
返回
eventEventreleaseNotes字符串releaseName字符串releaseDateDateupdateURL字符串
在更新下载完成后发出。
仅在 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()。
调用此函数以应用更新并非绝对必要,因为成功下载的更新始终会在下次应用程序启动时应用。