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-winstaller 或 Electron 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.Slack
和 com.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)
設定 url
並初始化自動更新器。
autoUpdater.getFeedURL()
回傳 string
- 目前的更新來源 URL。
autoUpdater.checkForUpdates()
詢問伺服器是否有更新。您必須在使用此 API 之前呼叫 setFeedURL
。
注意: 如果有可用更新,它將會自動下載。呼叫 autoUpdater.checkForUpdates()
兩次將會下載更新兩次。
autoUpdater.quitAndInstall()
重新啟動應用程式並在更新下載後安裝。它應該只在發出 update-downloaded
後呼叫。
在底層,呼叫 autoUpdater.quitAndInstall()
將會先關閉所有應用程式視窗,並在所有視窗關閉後自動呼叫 app.quit()
。
注意: 並非絕對必要呼叫此函式來套用更新,因為成功下載的更新仍然會在下次應用程式啟動時套用。