跳到主要內容

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 maker 來產生 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.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()

詢問伺服器是否有更新。您必須先呼叫 setFeedURL 才能使用此 API。

注意:如果有可用更新,將會自動下載。呼叫 autoUpdater.checkForUpdates() 兩次會下載更新兩次。

autoUpdater.quitAndInstall()

在下載更新後重新啟動應用程式並安裝更新。只有在發出 update-downloaded 之後才應該呼叫此方法。

在幕後呼叫 autoUpdater.quitAndInstall() 將會先關閉所有應用程式視窗,並在關閉所有視窗後自動呼叫 app.quit()

注意:嚴格來說,沒有必要呼叫此函式來套用更新,因為成功下載的更新始終會在下次啟動應用程式時套用。