2010-10-04 24 views
8

我寫的客戶端PC套件程序 -的C#程序自動更新

  • Windows服務
  • 用戶空間的Windows窗體應用程序

我需要能夠發佈這些程序的更新版本,並自動和透明地(無需用戶交互)自行更新客戶端PC。此更新將通過不可靠的3G連接(EvDO)完成。這些應用程序將持續運行,因此更新將不得不正常關閉服務/關閉應用程序,然後在更新後重新啓動它們。

在我花時間滾動自己的解決方案之前,是否有類似的東西的預先存在的解決方案?

注意:由於Windows服務以及其他一些原因,ClickOnce在這裏不起作用。我也無法利用BITS,因爲我針對的是Windows Azure,它缺少BITS IIS插件。

回答

9

爲什麼不考慮陰影複製。

影子複製使得能夠 在一個應用程序域用於 被更新而不卸載 應用程序域集。這是 對於必須連續可用的應用程序 特別有用,例如ASP.NET站點等 。

使程序非常簡單的炮彈。然後讓他們觀看(FileWatcher)更新文件夾的位置(以及傳送更新的位置)。然後動態重新加載AppDomain。

請參閱herehere瞭解更多信息。

可以使用 AppDomainSetup類的屬性如下,以 配置爲 影子拷貝應用領域:

通過設置 ShadowCopyFiles屬性字符串 值啓用陰影複製「真」 。默認情況下,此設置 會導致應用程序路徑中的所有程序集在加載之前被複制到 下載緩存。 這是 公共語言運行時保持存儲 下載的文件相同的緩存...我所遇到的(都使用BITS,其幹練處理不可靠連接)

+0

這似乎真的有希望。我會研究它並回復你。 – 2010-10-04 15:28:09

+1

我忘了添加我們過去使用過的這個功能,這樣我們就可以使用新的dll更新服務,而無需關閉它們。 – 2010-10-05 00:02:41