2012-05-10 199 views
2

我即將發佈應用程序的Beta版本,並希望確保可以在應用程序中通知用戶存在更新的情況下進行遠程更新。理想情況下,如果可能,我想強制更新。我目前使用與VS2010打包的InstallShield LE來構建我的安裝exe文件。.net應用程序更新

我的計劃是創建一個WCF Web服務,將提供所有產品版本的XML manifect。 我不確定如何提供更新。我能想到的選項是

  1. 提供一個新的InstallShield安裝 - 安裝程序是這樣一旦安裝了該程序比計劃頗有幾分 較大,送 出完整的安裝程序似乎矯枉過正。
  2. 送出去只是MSI 文件 - 我不知道我該怎麼去創造中VS2010的MSI安裝程序。
  3. 下載新的應用程序文件(exe文件的一個大約7個10 DLL)和 用新的替換當前的文件。

有沒有人有一個想法,哪個選項將是最好的,以及如何實現它?我需要某種代碼簽名並檢查客戶端的安全性嗎?

感謝您的任何幫助。

編輯 - 應該提到ClickOnce不是一個選項。主要是因爲它不適合我們的外觀和感覺。 ClickOnce還有一些其他問題,我不會在這裏討論。

+2

爲什麼不使用ClickOnce? – animaonline

+0

您已標記爲asp.net!它是網絡應用程序嗎? – Adil

+0

它有一個網絡組件,但它不需要更新,所以我刪除了標籤。 – Oli

回答

2

嗯,我遇到了類似的情況。幾年前,我們在發展與幾個可選的鬆散耦合的組件產品。我們最終做的是當應用程序啓動時,它檢查我們的「UpdateService」並匹配元數據。

如果不更新應用程序,我們推出一個單獨的進程來更新XML,從我們的更新服務,打倒在字節數組的DLL其拷貝相應文件夾中的XML和更新的DLL。

那對我們很有用。部分原因是客戶可能會升級功能,我們可能需要下載更多的DLL。

然而,第一次安裝的應用程序是通過安裝程序(EXE)。

面臨的挑戰是,我們必須有適當的管理或補丁/組件的版本一起編寫自定義的東西。但它足夠被考慮和滿足產品經理

+0

謝謝阿迪爾。你是否實施了代碼簽名等任何安全措施,以確保正在下載的DLL是來自你的,並且有人沒有黑客入侵你的網絡服務器並將病毒置於那裏? – Oli

+0

是的,但我不記得確切。有多個級別的安全檢查。例如,每個客戶端都有加密許可文件和xml文件的元信息。再加上dll簽名。 – Adil

+0

我使用DSE對下載的文件進行簽名的自定義解決方案。標記這回答,因爲它是最接近我寫的解決方案。 – Oli

1

的ClickOnce似乎是一個不錯的選擇..

http://msdn.microsoft.com/en-us/library/t71a733d(v=vs.80).aspx

問候

+0

對不起,應該在我的問題中提到ClickOnce不是一個選項。我在我的開發環境中使用,但不適合生產。 – Oli

+0

你能解釋一下爲什麼嗎? – Oscar

+0

對我來說,我使用它進行一些早期的alpha測試,但是我在生產環境中非常擔心它。當它出錯時,可能會完全消失。我見過不僅需要清理自己的clickonce應用程序(手動清理Reg條目,文件等以進行卸載),而且還要查看安裝在系統上的其他clickonce應用程序,這些應用程序可能與您無關。我知道這些情況很少見,但如果你有成千上萬的用戶安裝應用程序,那麼IMO不值得冒險。 – Oli

0

您將無法就地「撤換」的文件,除非你做的卷影拷貝(http://msdn.microsoft.com/en-us/library/ms404279.aspx)如果你沒有使用ClickOnce,你將不得不有一些方法來檢查應用程序中是否有更新。我會想象WCF對此是過度的;你可以簡單地擁有一個已知的URL來獲得可以與應用中的版本號進行比較的「版本號」,以及獲得「最新」版本的已知網址......大多數應用只需下載MSI並詢問用戶執行它。