ClickOnce 可以提供應用程式自動更新。 ClickOnce 應用程式會定期讀取它的部署資訊清單檔,以查看是否有此應用程式的更新可用, 如果有,就會下載及執行應用程式的新版本。 為了提高效率,只有已變更的檔案才會下載。
設計 ClickOnce 應用程式時,您必須決定應用程式要使用哪一種策略來查看可用的更新。 您有三種基本的策略可以使用:在應用程式啟動時檢查更新、在應用程式啟動後檢查更新 (在背景執行緒中執行),或提供更新的使用者介面。
此外,您可以決定應用程式檢查更新的頻率,而且可以讓更新成為必要。
注意事項 |
---|
應用程式更新會需要網路連接。如果沒有網路連接,不論您所選擇的更新策略為何,應用程式將會執行但不檢查更新。 |
注意事項 |
---|
在 .NET Framework 2.0 和 .NET Framework 3.0 中,不論應用程式是隨時檢查更新、在啟動之前或之後檢查更新,或者使用 System.Deployment.Application API 檢查更新,您都必須設定部署資訊清單中的 deploymentProvider。deploymentProvider 項目相當於 Visual Studio 中,[發行] 索引標籤的 [更新] 對話方塊中的 [更新位置] 欄位。.NET Framework 3.5 則放寬了此規則。如需詳細資訊,請參閱針對測試和實際執行伺服器部署 ClickOnce 應用程式但不重新簽章。 |
在應用程式啟動後檢查更新
使用此策略時,應用程式會在執行中時,嘗試在背景中尋找及讀取部署資訊清單檔。 如果有可用的更新,下次使用者執行應用程式時,就會收到下載並安裝更新的提示。
這項策略最適合低頻寬網路連接或可能需要冗長下載時間的大型應用程式。
若要啟用此更新策略,請在 [應用程式更新] 對話方塊的 [選擇應用程式應該於何時檢查更新檔] 區段中,按一下 [應用程式啟動之後]。 接著在 [指定應用程式應該要檢查更新檔的頻率] 區段內指定更新間隔。
這個步驟與在部署資訊清單內變更 [Update] 項目相同,如下所示:
<!-- When to check for updates -->
<subscription>
<update>
<expiration maximumAge="6" unit="hours" />
</update>
</subscription>
在應用程式啟動前檢查更新
預設的策略是在應用程式啟動前,嘗試找出並讀取部署資訊清單檔。 使用此策略時,每次使用者啟動應用程式,應用程式就會嘗試找出並讀取部署資訊清單檔。 如果有更新可用,就會下載並啟動更新。否則,就會啟動現有版本的應用程式。
這項策略最適合高頻寬網路連接,因為在低頻寬連接上啟動應用程式的延遲時間可能會非常久。
若要啟用此更新策略,請在 [應用程式更新] 對話方塊的 [選擇應用程式應該於何時檢查更新檔] 區段中,按一下 [在應用程式啟動前]。
這個步驟與在部署資訊清單內變更 [Update] 項目相同,如下所示:
<!-- When to check for updates -->
<subscription>
<update>
<beforeApplicationStartup />
</update>
</subscription>
讓更新成為必要
有時候,您可能會想要要求使用者執行更新版本的應用程式。 例如,您可能會對外部資源 (例如 Web 服務) 進行變更,進而導致舊版應用程式無法正確運作。 在這種情況下,您就會想要將更新標記為必要,並防止使用者執行舊版。
注意事項 |
---|
雖然您可以使用其他更新策略來要求更新,不過核取 [在應用程式啟動前] 選項是保證不會執行舊版的唯一方式。在啟動時若偵測到強制更新,使用者就必須接受更新或關閉應用程式。 |
若要將更新標記為必要項,請在 [應用程式更新] 對話方塊中按一下 [指定此應用程式的最小必要版本],然後指定發行版本 ([主要]、[次要]、[建置]、[修訂]),這樣會指定可安裝之應用程式的最低版本號碼。
這項設定與在部署資訊清單中設定 [Deployment] 項目的 [minimumRequiredVersion] 屬性 (Attribute) 相同,例如:
<deployment install="true" minimumRequiredVersion="1.0.0.0">
指定更新間隔
您也可以指定應用程式檢查更新的頻率。 若要這樣做,請根據本主題前面「在應用程式啟動後檢查更新」一節所述的方式,將應用程式指定為在啟動後檢查更新。
若要指定更新間隔,請在 [應用程式更新] 對話方塊中設定 [指定應用程式應該要檢查更新檔的頻率]。
這項設定與在部署資訊清單中設定 [Update] 項目的 [maximumAge] 和 [unit] 屬性相同。
例如,您可能會想要在應用程式每次執行時檢查、每週檢查一次,或每月檢查一次。 如果在指定的時間沒有網路連接,就會在應用程式下次執行時執行更新檢查。
提供更新的使用者介面
使用這項策略時,應用程式開發人員就會提供一個使用者介面,以便讓使用者選擇應用程式檢查更新的時間以及頻率。 例如,您可能會提供 [立即檢查更新檔] 命令,或是有不同更新間隔選項的 [更新設定] 對話方塊。 ClickOnce 部署 API 提供了讓您自行設計更新使用者介面的架構。 如需詳細資訊,請參閱 System.Deployment.Application。
如果應用程式是使用部署 API 來控制它本身的更新邏輯,您應該要封鎖更新檢查,如下一節「封鎖更新檢查」所述。
這項策略最適合在您需要針對不同使用者使用不同的更新策略時。
封鎖更新檢查
您也可以防止應用程式檢查更新。 例如,您可能有一個永遠不會更新的簡單應用程式,但想要利用 ClickOnce 部署所提供的簡易安裝功能。
如果應用程式是使用部署 API 來執行它本身的更新,您也應該要封鎖更新檢查;請參閱本主題前面的「提供更新的使用者介面」。
若要封鎖更新檢查,即可在應用程式的 [應用程式應該檢查更新檔] 核取方塊的對話方塊。
此外,您也可以從部署資訊清單中移除 <Subscription> 標記,藉以封鎖更新檢查。
使用權限提高和更新
如果 ClickOnce 應用程式的新版本需要使用比舊版本更高的信任層級才能執行,則 ClickOnce 將會提示使用者,詢問使用者是否要對應用程式授與這個較高的信任層級。 如果使用者拒絕授與較高的信任層級,則不會安裝更新。 ClickOnce 將會在下一次重新啟動時,再次提示使用者安裝此應用程式。 如果使用者在這時拒絕授與較高的信任層級,而且此更新未標記為必要項,則會執行舊版的應用程式。 不過,如果此更新為必要項,則使用者必須接受較高的信任層級之後,才會執行此應用程式。
如果您使用受信任的應用程式部署,就不會出現授與信任層級的提示。 如需詳細資訊,請參閱受信任的應用程式部署概觀。