2014-07-17 99 views
0

短版重新啓動和更新的ClickOnce應用程序在生產

有沒有一種方式,它在運行時自動更新ClickOnce應用程序

長版本...

設置

我有一個API和我開發一個應用程序控制臺劑。我需要卸下一些工作,這是處理這件事最簡單快捷的方法。我是ClickOnce的新手(事實上,這是我唯一一次使用過它),但對我來說這似乎很完美。我已經設置好了,以便應用程序可以與「不安裝」選項一起在線運行。

在較高的規模,代理調用API問什麼它應該做的,而API返回下一個任務,無論是必需的參數。

問題

因爲我的控制檯亞軍的「平靜」的性質,我試圖讓它要求儘可能少的用戶交互是可能的。不過,我現在需要面對的問題更新它理想情況下,它會在我的衣櫃裏的服務器上運行,所以我寧願不必連接顯示器和所有那些每次我需要重新啓動應用程序時。而它的運行方式來更新ClickOnce應用程序?

可能的解決方案

我還沒有找到什麼與我的搜索有關。我發現有幾個地方正在討論更新,但他們都提供瞭如何在應用程序啓動時檢查更新的示例。這對我來說並不重要,因爲我沒有在客戶機上安裝它。

正如我所說的,服務器正在推動的命令下到應用程序,所以它會是我實現一個說沒有問題「進行更新。」我最初的想法是做到這一點,然後做一個Process.Start(string)從我的網絡服務器上拉出.application文件,當然這會有最新版本。我可以做到這一點,然後停止正在運行的實例,理論上這將起作用。

但這會引發簽署問題。我寧願不處理簽名,儘管我承認我從來沒有做過任何事情,所以也許它沒有聽起來那麼糟糕。但是現在,當我從我的網站啓動亞軍時,需要點擊Windows對話框以確保我認識到風險。我不在乎是否必須在第一次運行時這麼做,但顯然否定了能夠像這樣進行產品更新的好處。

也許簽名比我想象的容易嗎?有沒有一種方法可以免費在應用程序上簽名,並且讓它足夠可信,至少在我接受了一次之後,我可以避免這種對話?

我很喜歡這樣做的標準方式,但由於它不是一個特別標準的問題,所以我也開放給不太標準的方式。例如,如果我可以啓動另一個控制檯應用程序,請停止主應用程序,換出一些應用程序文件,然後啓動它,這可能會起作用。但這聽起來很容易失敗,只是比我想要的更復雜。

它不一定是100%的解決方案。很明顯,這將是很好的,但只是一些工作時間最多就足夠了,因爲這實際上是我的個人項目比在客戶端計算機上的任何東西。

回答

2

你需要ApplicationDeployment

有方法CheckForUpdate()CheckForUpdateAsync()

當有可用的更新使用Update()UpdateAsync()

,那就是重新啓動ClickOnce應用程序的方式。

using System.Diagnostics; 
using System.Windows; 

public class Foo 
{ 
    public void Restart() 
    { 
     Process.Start(Application.ResourceAssembly.Location); 
     Application.Current.Shutdown(); 
    } 
} 
+0

哦,太棒了。那些看起來完美。儘管我在文檔中看到它說「如果CheckForUpdate發現有更新可用,並且用戶選擇不安裝它,......」這是否意味着提示用戶? –

+0

實際上,整個段落:「如果CheckForUpdate發現有更新可用,並且用戶選擇不安裝它,ClickOnce將提示用戶在下次運行應用程序時有更新可用。禁用此提示(如果應用程序是必需的更新,ClickOnce將在不提示的情況下安裝它。)「是否」如果應用程序是必需的更新...「是否意味着它會在不提示的情況下執行此操作? –

+0

「CheckForUpdate方法將當前安裝的部署版本與在UpdateLocation中找到的部署清單中指定的版本進行比較,如果服務器上的版本與安裝的版本不同,則返回true。 [不更新應用程序時]「ClickOnce將在下次運行應用程序時提示用戶更新可用。」 – Lucas

相關問題