autoUpdater
使应用程序能够自动更新自身。
进程:主进程
另请参阅:有关如何在应用程序中实现更新的详细指南。
autoUpdater
是一个 EventEmitter。
平台说明
目前,仅支持 macOS 和 Windows。Linux 上没有内置的自动更新程序支持,因此建议使用发行版的包管理器来更新您的应用程序。
此外,每个平台上还有一些细微的差别
macOS
在 macOS 上,autoUpdater
模块构建在 Squirrel.Mac 之上,这意味着您无需任何特殊设置即可使其工作。有关服务器端要求,您可以阅读 服务器支持。请注意,应用程序传输安全 (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
。您必须使用与 app.setAppUserModelId
API 相同的 ID 用于您的应用程序,否则 Windows 将无法在任务栏中正确固定您的应用程序。
事件
autoUpdater
对象发出以下事件
事件:'error'
返回值
error
Error
更新时出现错误时发出。
事件:'checking-for-update'
开始检查是否存在更新时发出。
事件:'update-available'
有可用的更新时发出。更新将自动下载。
事件:'update-not-available'
没有可用的更新时发出。
事件:'update-downloaded'
返回值
event
EventreleaseNotes
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()
。
注意: 调用此函数以应用更新并非严格必要,因为成功下载的更新将在应用程序下次启动时始终应用。