21

我更新了我的ClickOnce應用程序,然後在用戶運行時詢問他們是否要安裝新版本。ClickOnce應用程序跳過要求更新(如果選擇跳過則跳過啓動)

我在高度控制的環境中工作。當更新可用時,必須安裝更新(與舊版本無法保證向後兼容數據庫)。

另一種選擇是如果跳過按下(也可以正常工作),則運行失敗。

我需要一些方法來阻止他們運行舊版本的應用程序。

回答

39

本文回答您的問題。我將你引向文章,而不是隻發佈一個答案,因爲文章中的所有內容都值得了解。

http://www.sayedhashimi.com/CategoryView,category,ClickOnce.aspx

以下是文章的相關摘錄:

強制的ClickOnce更新

一個 ClickOnce是自動更新的大賣點。 之一我得到關於 更新的常見問題是「我如何強制用戶更新 ?」

有三件事情 就知道強迫的用戶更新:

1)如果你的應用是在線應用 ,用戶將總是 運行最新版本;在線 應用程序每次被下載 應用程序被訪問。因此,使用在線應用程序的 ,默認情況下會獲得 強制更新。

2)如果您的應用程序是安裝的 應用程序,則可以使用MinimumRequiredVersion 屬性強制更新 。如果您使用Visual Studio發佈您的 應用程序,那麼您的 可以從更新 對話框中設置此屬性。

3)要注意的最後一件事是,如果 您的應用程序是安裝 應用程序(和你沒有設置 MinimumRequiredVersion屬性) 的ClickOnce會提示有 「更新」,用戶如果只限Dialog 用戶從 開始菜單快捷方式啓動應用程序。也就是說,如果 應用程序是安裝的 應用程序,並且用戶從URL啓動 應用程序,則ClickOnce 將強制更新。


我還發現了另外一個很好的文章:

ClickOnce: Bringing Ease and Reliability to Smart Client Deployment

+1

很好的答案!非常感謝。 – Vaccano 2009-10-28 16:21:03

+0

感謝您的回答,非常有幫助! :) 只是說明sayedhashimi.com鏈接已損壞。 – deadlydog 2012-08-14 17:41:33

+1

我記錄了一個過程,用於在http://geekswithblogs.net/deadlydog/archive/2012/08/15/force-clickonce-applications-to-automatically-update-without-使用方法2時自動更新MinimumRequiredVersion屬性, prompting-user.aspx – deadlydog 2012-08-15 00:10:03

2

它的工作我通過取消應用程序應該檢查更新,並且應用程序啓動時沒有提示用戶更新後兩個版本。

Enter image description here

+3

這隻有在您使用Clickonce API處理代碼中的更新時纔有效:http://msdn.microsoft.com/en-us/library/ms404263.aspx – 2013-07-03 08:12:19

+1

yes我的代碼正在處理Program.cs中的更新我重新加載代碼如果程序集有更新的版本 – PUG 2013-07-03 18:05:56

0

要強制在客戶端的更新必須設置的最低版本字段等於給正在部署的當前版本,這將迫使whiout「跳過」選項的更新。

4

這對我來說乾淨利落。添加以下的項目文件:

<UpdateRequired>true</UpdateRequired> 
<MinimumRequiredVersion>$(ApplicationVersion)</MinimumRequiredVersion> 

注意ApplicationVersion不能像在項目文件1.0.0.*的值,它應該在構建時進行自動更新工作遞增。

如果使用TeamCity的,增加版本號去構建配置頁面爲您的項目,並設置以下系統屬性

system.ApplicationVersion = %build.number% 

您還可以得到的MSBuild遞增版本的時間與這樣的事情:

<UpdateRequired>true</UpdateRequired> 
<BuildNumber>$([System.DateTime]::Now.ToString(yyyyMMdd))</BuildNumber> 
<RevisionNumber>$([System.DateTime]::Now.ToString(mmss))</RevisionNumber> 
<ApplicationVersion>1.0.$(BuildNumber).$(RevisionNumber)</ApplicationVersion> 
<MinimumRequiredVersion>$(ApplicationVersion)</MinimumRequiredVersion>