2011-02-03 18 views
4

我們已經構建了一個.NET Windows服務,我們在客戶端PC上安裝以從這些PC監視和上傳數據(通過Web服務)。我正在尋找一種方式來集中更新所有客戶端PC上的Windows服務 - 無需遠程訪問每個商店。如何從中央位置更新.net Windows服務

這裏有一些細節(雖然,我不認爲這 真正的問題):

  • Windows服務:.NET版本2(由於客戶端PC的限制) - VB.NET
  • Web服務:.NET版本4 - VB.NET
  • 客戶端PC操作系統:Win2000到Win7的,POSReady,WEPOS

一些額外的信息

  • 我們有一個安裝文件,工作得非常好,但我們需要遠程連接到每個商店來運行它。而且有100多家店!
  • 我們曾考慮將安裝文件放在FTP站點上,但被告知Windows Embedded操作系統不支持FTP,因此我們可能通過Web服務發送文件。
  • 每分鐘一次,每個Windows服務調用一個Web服務方法,該方法返回一些XML,可用於發送更新Web服務的指令。

這似乎是開發人員需要多次解決的標準問題。如果任何人有任何建議或可以建議他們使用的過程,它會真的幫助我們。

UPDATE

  • 我可以更改Windows服務和Web服務來添加這個新的更新功能
  • 貌似我有辦法讓安裝文件(從Web服務下載方法),但運行它呢?如何運行安裝程序,然後確保Windows服務已關閉?安裝程序是否執行該操作或Windows服務?

回答

3

如果您有Web服務,則可以添加更新的方法。

創建一個小的更新安裝程序或應用程序(您可以在本地運行)。
然後在web服務中添加一個返回Stream或byte []數組的方法。
在Web服務的方法中,將二進制安裝程序文件讀取到byte []數組或流中,並將其發送到客戶端。

然後讓客戶端將該流保存到文件中,現在您在客戶端計算機上安裝了安裝程序。
剩下要做的就是運行該進程並更新服務。

+0

好的答案,如果他已經有這樣的東西內置到他的應用程序。我敢打賭,他沒有,但他會在經歷手動推送補丁安裝程序或更新程序的頭痛之後獲取補丁。 – KeithS 2011-02-03 21:52:27

+0

現在在應用程序中構建它,手動更新它們(發送所有的安裝或其他東西),然後下次不必擔心。 – 2011-02-03 21:56:14

1

如果修補程序是MSI程序包,則可以使用Active Directory將更新推送到AD服務器控制下的同一網絡中的計算機。然後,更新將立即運行或在下次啓動時運行。

你可以自己推包,但必須有一些傳輸機制在另一端監聽,由具有足夠的智能和特權來自動執行更新的程序控制。

禁止廣告,這可能是你最好的拍攝:使用普通的網絡文件共享推送更新到客戶端。客戶端計算機必須正在運行,但它可以位於歡迎屏幕上。然後,將一個批處理文件放置在將執行MSI「固定安裝」的用戶/所有用戶/開始菜單/啓動文件夾(基本上告訴MSI使用默認安裝參數執行無提示安裝)的Documents &。在下一次用戶登錄時,批處理文件將運行,執行安裝。 MSI應該在之後清理批處理文件。如果您可以遠程訪問客戶端計算機的註冊表(我高度懷疑這一點),則可以將該批處理文件放在某個臨時目錄中,並將其引用到RunOnce註冊表文件夾中。

通過這個rigamarole一次可能會教你如何構建這樣的應用程序來檢查並通過已知的Web服務下載他們自己的更新,或將它們設置爲使用ClickOnce部署(這會導致安裝目錄混亂,但更新部署變得更簡單)。