跳到主要內容

autoUpdater

使應用程式能夠自動更新。

程序:主程序

另請參閱:關於如何在您的應用程式中實作更新的詳細指南

autoUpdater 是一個 EventEmitter

平台注意事項

目前僅支援 macOS 和 Windows。Linux 上沒有內建的 auto-updater 支援,因此建議使用發行版的套件管理器來更新您的應用程式。

此外,每個平台上都存在一些細微的差異。

macOS

在 macOS 上,autoUpdater 模組是基於 Squirrel.Mac 建構的,這表示您不需要任何特殊設定即可使其運作。關於伺服器端需求,您可以閱讀 Server Support。請注意,App Transport Security (ATS) 適用於更新過程中發出的所有請求。需要停用 ATS 的應用程式可以將 NSAllowsArbitraryLoads 金鑰新增到其應用程式的 plist 中。

注意: 您的應用程式必須經過簽署才能在 macOS 上進行自動更新。這是 Squirrel.Mac 的要求。

Windows

在 Windows 上,您必須先將您的應用程式安裝到使用者的電腦中,才能使用 autoUpdater,因此建議您使用 electron-winstallerElectron Forge 的 Squirrel.Windows maker 來產生 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()

注意: 並非絕對必要呼叫此函式來套用更新,因為成功下載的更新仍然會在下次應用程式啟動時套用。