Categorieën: Alle - 策略

door 余小章 's 7 jaren geleden

480

部署-Desktop

ClickOnce 部署方式提供了一種便捷、安全的應用程式安裝和更新機制,特別適合非系統管理員使用者。相比於傳統的 Windows Installer 部署,ClickOnce 簡化了許多操作,減少了對使用者電腦的影響,並避免了版本控制上的衝突。每個 ClickOnce 應用程式都是獨立的,這意味著它們不會干擾其他已安裝的應用程式,而且更新過程可以做到差異更新,只下載變更部分的檔案,有效節省帶寬。

部署-Desktop

部署-Desktop

應用程式的 App.config 也有 Debug 和 Release 自動置換的功能

安裝ClickOnce應用程式

此應用程式可加入至使用者的 [開始] 功能表和 [控制台] 的 [新增或移除程式] 群組中。 不過,與其他部署技術不同的是,[Program Files] 資料夾或登錄中都不會加入任何項目,而且安裝時不需要系統管理權限。
憑證可以在電腦或企業層級受到信任,因此,以信任的憑證簽署的 ClickOnce 應用程式可以無訊息模式進行自動安裝
如果應用程式需要更高的使用權限,或者是應用程式未由信任的憑證簽署,則此對話方塊也會要求使用者授與使用權限,以便繼續進行安裝。 雖然 ClickOnce 安裝是針對個別使用者進行,但如果有必要條件需要系統管理員權限,則可能需要更高的使用權限
在大部分情況下,一般使用者都會收到一個簡單的對話方塊,詢問使用者是否確定要安裝,然後不需要另外介入就會繼續進行安裝並啟動應用程式
部署成功後,一般使用者就可以按一下 Web 網頁或資料夾中表示部署資訊清單檔的圖示

部署 ClickOnce

發行

定時更新範例

Task.Run(() => { while (true) { this.InstallUpdateSyncWithInfo(); Thread.Sleep(1000); if (this._isStop) { this._isStart = false; break; } } });

private void InstallUpdateSyncWithInfo() { UpdateCheckInfo info = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; try { info = ad.CheckForDetailedUpdate(); } catch (DeploymentDownloadException dde) { MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message); return; } catch (InvalidDeploymentException ide) { MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message); return; } catch (InvalidOperationException ioe) { MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message); return; } if (info.UpdateAvailable) { Boolean doUpdate = true; if (!info.IsUpdateRequired) { DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel); if (!(DialogResult.OK == dr)) { doUpdate = false; } } else { // Display a message that the app MUST reboot. Display the minimum required version. MessageBox.Show("This application has detected a mandatory update from your current " + "version to version " + info.MinimumRequiredVersion.ToString() + ". The application will now install the update and restart.", "Update Available", MessageBoxButtons.OK, MessageBoxIcon.Information); } if (doUpdate) { try { ad.Update(); MessageBox.Show("The application has been upgraded, and will now restart."); Application.Restart(); } catch (DeploymentDownloadException dde) { MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde); return; } } } } }

同步更新

Update

CheckForUpdate

非同步更新

大型更新,您可以透過 CheckForUpdateProgressChanged 和 UpdateProgressChanged 事件接收進度告知,並使用 ProgressChangedEventArgs 中的資訊告知使用者下載狀態

UpdateAsync

引發 UpdateCompleted 事件

CheckForUpdateAsync

引發 CheckForUpdateCompleted 事件

必要條件

區域網路內

發行位置

Share Folder

安裝FTP

Web Site

因為人品的關係,我從來沒成功過

IIS8.5 尚不支援

需安裝FrontPage Server

ClickOnce 核心部署架構是以兩個 XML 資訊清單檔為基礎:應用程式資訊清單和部署資訊清單。 這些檔案用來描述 ClickOnce 應用程式的安裝來源、更新方式和更新時機。

什麼是 ClickOnce 應用程式?

ClickOnce 應用程式會在 [網際網路] 或 [內部網路] 安全性區域中執行。 必要時,應用程式就可以要求更高的安全性權限。
ClickOnce 應用程式是獨立的,也就是說,每個 ClickOnce 應用程式都會安裝在針對使用者和應用程式的安全快取中,然後從中執行
由於 ClickOnce 應用程式是隔離的,因此安裝或執行 ClickOnce 應用程式都不會中斷現有的應用程式
自動更新,檢查可用的更新版本,並且自動取代任何更新的檔案
開發人員可以指定更新行為,不過網路系統管理員也可以控制更新策略,例如,將更新標記為強制的
更新方式採用差異更新
可避免應用程式在只有一兩個檔案變更時,必須重新下載
比較目前應用程式之應用程式資訊清單內所指定之檔案的雜湊簽章以及新版本資訊清單內的簽章,如果檔案的簽章不同,則 ClickOnce 會下載新版本
三種更新策略
調用ApplicationDeployment API

程式在執行期間,嘗試在背景尋找部署資訊清單檔,如果有可用的更新立即通知使用者是否更新

程式啟動前更新

適合高頻寬網路連接,因為在低頻寬連接上啟動應用程式的延遲時間可能會非常久。

版本回復,一般使用者或系統管理員都可以將更新復原為之前的版本

預設的策略是在應用程式啟動前,嘗試找出並讀取部署資訊清單檔。使用此策略時,每次使用者啟動應用程式,應用程式就會嘗試找出並讀取部署資訊清單檔。如果有更新可用,就會下載並啟動更新。否則,就會啟動現有版本的應用程式

程式啟動後更新

適合低頻寬網路連接或可能需要冗長下載時間的大型應用程式。

應用程式會在執行中時,嘗試在背景中尋找及讀取部署資訊清單檔。如果有可用的更新,下次使用者執行應用程式時,就會收到下載並安裝更新的提示。

兩種執行方式
僅限線上模式中執行
離線,也可以在本機上執行
四種方式發行
CD-ROM
File Share
FTP
Web
四種專案樣版可使用ClickOnce
Office
Console App
Windows Form
WPF

為什麼要用 ClickOnce 部署?

安全性權限: Windows Installer 部署需要系統管理權限,並且只允許有限的使用者進行安裝;而 ClickOnce 部署可讓非系統管理員的使用者進行安裝,並且僅授與應用程式所必要「程式碼存取安全性」權限。
對使用者電腦的影響: 如果使用 Windows Installer 部署,應用程式通常會仰賴共用元件,而且可能會造成版本控制衝突。不過,只要使用 ClickOnce 部署,每個應用程式都是獨立的 (Self-Contained),而且不會干擾其他應用程式。
更新應用程式的困難: 若使用 Microsoft Windows Installer 部署,只要應用程式更新,使用者就可以安裝更新 (msp 檔),並且將它套用至已安裝的產品;而經由使用 ClickOnce 部署,您可以自動提供更新, 並且只會下載應用程式中經過變更的那部分,然後再從新的並存資料夾重新安裝完整、更新的應用程式。