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 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.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()
詢問伺服器是否有更新。您必須先呼叫 setFeedURL
才能使用此 API。
注意:如果有可用更新,將會自動下載。呼叫 autoUpdater.checkForUpdates()
兩次會下載更新兩次。
autoUpdater.quitAndInstall()
在下載更新後重新啟動應用程式並安裝更新。只有在發出 update-downloaded
之後才應該呼叫此方法。
在幕後呼叫 autoUpdater.quitAndInstall()
將會先關閉所有應用程式視窗,並在關閉所有視窗後自動呼叫 app.quit()
。
注意:嚴格來說,沒有必要呼叫此函式來套用更新,因為成功下載的更新始終會在下次啟動應用程式時套用。