2009-07-15 146 views
0

我有WCF客戶端服務器應用程序,併爲這兩個項目的MSI安裝項目。服務器是承載WCF服務的Windows服務,客戶端是WPF應用程序。現在我有一個自動化客戶端更新機制的要求。這是在客戶端打開它應該檢查服務器中是否有更新,如果是下載並安裝,然後運行。我應該使用點擊一次部署嗎?有沒有標準的機制來做到這一點,或者我應該手動實施它?還有其他建議嗎?
編輯
調查點擊一次的限制,感謝親愛的responsers,我發現,點擊一次不sutuble我們的應用程序,是否有其他的機制呢?什麼是與Web服務做到這一點的最佳做法..?
非常感謝部署和自動更新

+0

您可能想查看WiX(http://wix.sourceforge.net)。它可以幫助你建立你的.msi文件。我似乎記得一些與WiX(我認爲它被稱爲ClickThrough)的東西來幫助解決更新。我不知道它是否完全發展。 – codeConcussion 2009-07-23 14:20:41

+0

謝謝whatknott我會檢查它 – 2009-07-23 16:44:42

回答

2

ClickOnce是一個偉大的工具。但是,在決定之前你應該知道它有一些限制。

  • 它不允許您選擇應用程序的安裝位置。它將它們安裝在用戶配置文件下的混淆位置。是的,這意味着ClickOnce應用程序按照用戶下載和安裝,而不是按照計算機安裝。
  • 它只是保持在用戶機器上的文件同步與服務器上的文件,僅此而已。您不能安裝第三方msi文件,註冊dll,安裝程序集到GAC等。

還有其他警告,但這兩個是大多數人的大問題。如果你能解決這些問題,那麼ClickOnce可能是你的選擇。

試用時,我只需從Visual Studio發佈您的應用程序並使用自我證書。如果您決定使用ClickOnce,您可能會想要使用MSBuild或MageUI來生成您的部署,並且您可能需要考慮從證書頒發機構(如Verisign)購買代碼簽名證書。

編輯
只是想回應@Richard Dunlap的評論。他是正確的,您可以在Visual Studio中指定先決條件,併爲您構建引導程序。引導程序不必單獨下載您prereqs,以正確的順序運行它們,等

然而節省了用戶,這在很大程度上只是一種功能,VS提供,並且是國際海事組織,從ClickOnce的獨立。 ClickOnce僅限於確保GAC中存在程序集,然後在沒有安裝的情況下使安裝失敗。您的引導程序和ClickOnce安裝之間確實沒有關係。你幾乎必須告訴用戶:「如果你沒有產品x,y或z,請在嘗試安裝我的應用程序之前運行這個引導程序。」沒有什麼ClickOnce可以檢查某些第三方COM產品,並強制用戶在運行應用程序之前安裝它。

1

這看起來像一個簡單的使用的ClickOnce的。無論您想使用自動的ClickOnce更新或做程序的更新,取決於以下因素:

  1. 如果你設置的ClickOnce在啓動之前檢查更新時,您會首先得到一個基本的Microsoft框通知用戶該應用程序正在檢查更新。如果你對此好,很好。如果您希望用戶首先看到您的啓動畫面,或者如果您有其他一些啓動活動需要與檢查更新並行運行,則可能需要其他選項。

  2. 如果你設置的ClickOnce在啓動後檢查更新,你直行進入應用程序,但該更新將不會被部署,直到下一次應用程序啓動;您當然可以通知用戶現在有更新的版本,並提供重新啓動選項。如果用戶最後一次運行舊版本,那麼這很有效。

  3. 如果這兩個選項都會導致您的問題,那麼您可以使用API​​來執行程序更新。這是我們選擇做的事情 - 因爲我們的ClickOnce應用程序是與Web服務通信的表示層客戶端,所以對我們的客戶來說最好始終運行最新版本的軟件。但是,我們希望在應用程序檢查更新時使用時間來執行其他內務處理(例如檢查Web服務的連接) - 我們希望用戶在等待期間看到我們的徽標和公司名稱。 :-)

足夠讓你開始?

+0

調查點擊一次您和Whatknott說的限制,我發現點擊一次不適用於我們的應用程序,是否有任何其他機制? Hhat是使用Web服務做到這一點的最佳實踐... – 2009-07-16 03:49:37

1

此博客(http://coffeedrivendevelopment.blogspot.com/2008/09/clickonce-deployment-or-not.html)描述了他不使用ClickOnce的決定,以及一個用於編寫自己的自我更新的簡單機制程序。他使用源代碼控制來檢查新版本,但理論上可以檢查發佈新版本的位置,以及其他版本指示器(文本文件,數據庫,Web服務調用等)。