2011-12-07 59 views
2

在正常的Windows應用程序中,我可以使用...
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CheckForUpdate()
...確定是否有更新可用。如何讓控制檯應用程序檢查更新而不使用ClickOnce?

我知道我可以使用System.ReflectionAssemblyAssemblyName打印爲它當前正在運行的應用程序的版本,但我不知道如何得到它來比較,以什麼被公佈最近。

對於控制檯應用程序而言,什麼是CheckForUpdate(),而不使用ClickOnce?

回答

5

您需要一些服務器端,應用程序可以使用它來找出最新版本。就個人而言,我會用一個Web服務去返回最新的版本號和一個可以下載的url,但是這也可以通過一個靜態頁面來完成,這個靜態頁面會被解析爲這個信息。應用程序啓動後,檢查它的版本號是否與服務返回的版本號相同。如果服務報告較新版本,則使用HttpWebRequest(或其他方法)下載新版本。如果新版本打包爲安裝程序,則可以執行安裝程序並退出當前正在運行的實例。如果你想要比安裝程序更安靜的東西,你需要一種更新你的EXE文件的方式。這通常由第二個應用程序(更新程序)完成,該應用程序等待主應用程序退出並將新版本的exe移動到位,然後重新啓動應用程序。有一點需要記住的是,爲了使用這個應用程序正在運行的用戶,需要有權寫入程序目錄。

如果這更多的是想要使用文件共享的公司環境,則可以採用不同的方式。讓程序檢查具有最新版本和更新路徑的文本文件的衆所周知的共享目錄。解析文本文件以獲取與上面相同的信息,並使用system.io命名空間類從指定路徑獲取新版本。它基本上是相同的操作,但使用文件路徑而不是Web請求。

+0

這絕對是一家公司。環境。在VS2010中,如果您打開解決方案屬性並轉到發佈,則可以單擊更新...並使用它來指定程序檢查更新的位置。問題是這種方法不允許用戶推遲更新,並且它需要用戶在安裝更新之前打開應用程序兩次。在Windows應用程序中,您可以使用System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateAsync()強制更新,然後在完成後關閉應用程序。我發現很難相信控制檯應用程序沒有類似的東西。 – newuser

+0

我的理解是,所有這些都依賴於您說要避免的ClickOnce框架。 –

+0

那麼很明顯,我一直誤導ClickOnce。如果我目前在Windows應用程序中使用它,那麼我從來沒有意識到它。大聲笑 – newuser

相關問題