2013-04-07 23 views
1

我正在定製WPF應用程序的ClickOnce部署,並且希望確保我不會錯過關於該過程的某些內容。據我所知,ClickOnce將處理安裝應用程序,並可選擇在啓動時檢查更新,還可以選擇在應用程序啓動後按設定的時間間隔檢查更新。這可以在沒有任何自定義代碼或定製的情況下完成。自定義ClickOnce的「Update at Statup」功能

如果我們想要我們可以通過編寫我們自己的「安裝」程序來定製安裝過程。它可以是使用以下演練的標準WPF應用程序。這是正在安裝的應用程序的單獨項目。

演練:Creating a Custom Installer for a ClickOnce Application

我們可以這樣通過實施以下演練的代碼建立一個「檢查更新」功能。

如何:Check for Application Updates Programmatically Using the ClickOnce Deployment API

什麼我不知道的就是我們能在那裏定製的ClickOnce檢查在啓動更新,因爲用戶點擊快捷方式打開應用程序的一部分嗎?我喜歡每次用戶打開應用程序時檢查更新的想法,但我想完全自定義該過程。據我所知,似乎沒有辦法自定義ClickOnce在啓動時檢查更新的部分。有人可以驗證嗎?

如果無法自定義「啓動時更新」過程,那麼我看到的一個替代方法是根本不使用ClickOnce,編寫自己的自定義代碼來處理安裝,檢查啓動時的更新以及檢查更新應用程序正在運行。

SO上有一些其他帖子提出類似這樣的問題。

Customize clickonce download screen

我的應用程序有一個動態的閃屏。我可以更改該啓動畫面以顯示諸如Checking for updates…之類的消息,如果找不到任何消息,請繼續加載該應用程序。如果發現更新,然後強制應用程序重新啓動?這裏的缺點是我們會看到兩次啓動畫面。

如果這是我自己定製的過程,那麼我會有兩個EXE,一個是MyApplicatoinUpdate.exe,第二個是MyApplication.exe。快捷方式將啓動MyApplicationUpdate.exe執行Checking for updates,如果找到一些然後下載它們(文件尚未使用)。如果沒有找到更新,則啓動MyApplication.exe並讓MyApplicationUpdate.exe自行關閉。最後更新updater將這個邏輯放在MyApplication.exe。不知道ClickOnce是否會允許我定製它。

感謝, -Eric

回答

1

你可以設置你的WPF應用程序不使用自動更新。該設置位於Publish -> Updates... -> (uncheck) The application should check for updates下的項目屬性中。在禁用該設置的情況下,您可以編寫代碼以查看和下載更新。

請參閱bottom of this page上的示例以異步檢查ClickOnce更新。您可以將其用作腳手架來構建自己的更新邏輯。

所以是的,你可以自定義過程,但是你僅限於你從ClickOnce API獲得的回調。

您可以使用異步回調來更新啓動畫面上的信息。是的,你會重新啓動,但這是很多商業啓動器/更新程序的行爲。如果更新不重要,則可以等待用戶下次重新啓動程序。這就是Chrome瀏覽器進行更新的方式。

您鏈接的另一個SO問題是關於第一次安裝期間的演示文稿。如果在第一次運行期間不顯示默認UI很重要,則必須編寫用戶可以下載並運行的應用程序。該應用程序將使用InPlaceHostingManager以編程方式下載您的「真實」應用程序,同時顯示您的自定義用戶界面。

如果您不關心首次安裝期間的默認UI,則可以將更新邏輯放在主應用程序中,並避免兩個.exes。如果真的很重要,不要顯示默認UI,則必須使用兩個.exe解決方案。