跳至頁尾內容
Iron Academy Logo
C#應用程式
C#應用程式

其他類別

using Velopack 快速部署和更新 C# 桌面應用程式

[[academy-video-youtube({"vid": "DcKglltuznc", "start_time": "0", "title": "Deploy and Update C# Desktop Apps Fast with Velopack", "creator": "Tim Corey", "length": "32m 25s"})]]

傳統上,部署和更新跨平台桌面應用程式一直是開發中最令人沮喪的部分之一。 但正如Tim Corey在他的影片"Deploy and Update C# Desktop Apps Fast with Velopack"中所解釋的,這個過程現在可以變得非常容易。

使用Velopack這個從構建套件到應用更新的出色工具,開發者現在可以使用僅一個命令來建立、部署和維護他們的應用程式,無需複雜的構建流程或無盡的配置檔案。

在本文中,我們將詳細介紹Tim的整個32分鐘教學,涵蓋如何使用Velopack將一個標準的C# WPF應用程式轉換為自動更新的可攜式套件。 我們也將看到它如何支持自動遷移、程式碼簽名和零配置設置在多個平台上——同時保持本地性能。

介紹:為什麼選擇Velopack?

Tim從解釋部署和更新桌面應用程式並不需要困難開始事實上,它可以"簡單易行"。他在本影片中的目標是展示如何通過包裝一個WPF應用程式,製作安裝程式並啟用自動更新來簡化這個過程。

他強調,這不僅限於WPF——相同的流程適用於WinForms、控制台應用程式,甚至非.NET的軟體如Java、Rust或C++。 Velopack支持幾乎任何語言或框架的打包,這使其成為當今可用的最佳跨平台應用程式安裝框架之一。

建立WPF專案

Tim在Visual Studio 2022中開始,建立了一個名為DeployDemo的簡單WPF專案。 專案目標是.NET 9,但正如他所指出,它在較新版本上如.NET 10上運作無誤。

這種初始構建只是一個小應用程式,用來展示完整的部署和更新過程。 雖然他使用了WPF,他重申,Velopack對於跨平台桌面應用也同樣有效,使其成為所有型別.NET和非.NET專案的一種解決方案。

安裝Velopack作為全域工具

接下來,Tim開啟終端並輸入:

dotnet tool install -g vpk

這個單命令在系統上全域安裝Velopack,使開發者可以從任何地方運行Velopack命令。

Tim稱其為"秘傳步驟",因為Velopack會將您的專案編譯器輸出轉換為可自動更新的可攜式包。 此步驟為您的應用提供了一個專業的安裝框架和自動更新框架——一石二鳥。

他解釋說,命令行既能簡化設置,又能輕鬆整合到CI/CD流水線中,因此開發者可以自動化包裝、建立版本和部署,而無需額外的腳本。只需一個命令即可實現自動化,這意味著開發者可以節省寶貴的時間,同時保持一致的構建。

安裝Velopack NuGet Package

在Visual Studio內,Tim打開Manage NuGet Packages並安裝Velopack package。

他解釋說,Velopack是Squirrel(之前流行的安裝框架)的繼任者。 如果您使用過Squirrel,Velopack可以自動遷移現有設置——提供更高的可靠性、快得多的構建速度和更好的跨平台相容性。

Velopack可以為Windows、Linux和macOS生成桌面安裝程式,支持各種編程語言如C#、Rust、C++和JavaScript。 這是一個跨平台應用程式部署的框架,在系統間運作出色。

Tim強調,Velopack完全免費使用——沒有訂閱或授權費用,但卻提供了與商用解決方案相當的專業安裝框架。

在程式碼中初始化Velopack

在App.xaml.cs檔案中,Tim新增了一個構造器,並用幾行程式碼初始化了Velopack:

new VelopackApp()
    .Build()
    .Run();
new VelopackApp()
    .Build()
    .Run();

這個零配置設置立即將應用程式連接到Velopack的自動更新框架。 雖然這還沒有檢查更新,但這正是使Velopack在後續開始管理更新和安裝時表現出色的原因。

Tim解釋說,儘管這個設置很簡單,但它強大到足以使應用程式自我更新,確保使用者總是在其終端使用者機器上運行最新版本。

設計使用者介面

在深入了解更新之前,Tim構建了一個基本的WPF介面。 他建立了一個網格佈局並將"更新"按鈕放在右上角。

起初,一個錯誤的元素導致了一個錯誤,但Tim利用這機會提醒觀看者WPF中的佈局層次結構有多重要。 修正後,可安裝的應用介面看起來乾淨且可調整大小——顯示了Velopack如何與流行的框架如WPF出色配合。

然後他新增了一個包含文字框(mainTextBox)和提交按鈕(submitButton)的StackPanel。 當應用運行時,它顯示了一個簡單的工作使用者介面。 這個小專案稍後將用於展示自動應用的更新。

實施更新按鈕

現在Tim轉向功能部分。 他雙擊"更新"按鈕生成其點擊事件。 這將成為自動更新框架的核心。

他解釋說,可以將這個過程分為三個階段——檢查、下載和應用更新——但為了演示,他將所有三個階段合併到一個事件中,以簡化操作。

編寫更新邏輯

在MainWindow.xaml.cs中,Tim建立了一個新的UpdateManager並指向一個將充當更新來源的本地路徑:

var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");

在實際使用中,這個路徑可能是面向外部應用程式的HTTPS URL,或者一個用於內部分發的本地文件共享。 Velopack不需要繁重的配置——在任何環境中都能無縫運作。

然後,Tim新增了異步程式碼以處理版本檢查和更新:

var newVersion = await mgr.CheckForUpdatesAsync();

if (newVersion == null)
{
    MessageBox.Show("You are on the latest version.");
    return;
}

await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);
var newVersion = await mgr.CheckForUpdatesAsync();

if (newVersion == null)
{
    MessageBox.Show("You are on the latest version.");
    return;
}

await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);

此程式碼檢查較新版本,下載增量包,並立即應用它們。 Velopack會處理所有事情——更新完成後,應用程式自動重新啟動。

他解釋說,雖然此演示使用按鈕點擊,開發者也可以像專業軟體一樣在啟動時靜默或自動觸發這些更新。

發布應用程式

接下來,Tim示範如何發布第一個版本。 使用專案文件夾內的終端,他運行:

dotnet publish --self-contained -r win-x64 -o ./publish

這生成了一個包含.NET運行時的獨立構建。這意味著應用程式將在任何終端使用者的計算機上運行,無需單獨安裝.NET。

Tim在發布目錄中顯示了編譯的輸出——DeployDemo.exe文件,確認它運行正常。 在這一點上,它只是編譯器輸出——尚未是打包的、可安裝的版本。

建立安裝套件

為將發佈的文件轉換為可部署安裝程式,Tim使用Velopack的pack命令:

vpk pack --pack-id DeployDemo --pack-version 1.0.0 --pack-directory ./publish

這建立了一個Releases文件夾,包含所有必要文件,包括設置可執行文件。

Tim將這些發行文件複製到本地"伺服器"文件夾。 運行生成的設置文件完全安裝應用程式——它會建立快捷鍵,新增一個進入"程式和功能"列表中,並提供不需要額外許可權或UAC提示的原生安裝體驗。

現在,該應用程式是一個由Velopack支持的正式可安裝應用程式。

更新應用程式

為模擬更新,Tim修改了提交按鈕的程式碼:

MessageBox.Show($"Hello {mainTextBox.Text}");
MessageBox.Show($"Hello {mainTextBox.Text}");

然後,他通過重複相同的發布和包裝命令但使用更新的版本號重新打包應用:

vpk pack --pack-id DeployDemo --pack-version 1.0.1 --pack-directory ./publish

Velopack自動建立增量包(為現有使用者準備的小型差異文件)和一個完整包以供新安裝。 Tim指出,儘管完整包約為63 MB,但增量包僅為132 KB——這證明了Velopack比其他工具或安裝框架快得多且更高效。

他將新的發行文件複製到伺服器文件夾,有效地建立了1.0.1版本的發行版。

應用更新

Tim重新打開已安裝的應用程式並點擊更新按鈕。 在幾秒鐘內,Velopack下載並應用1.0.1更新——應用自動重新啟動。

當他輸入他的名字並點擊提交時,它現在會說"Hello Tim。" 這個更新框架運行如閃電般快,證明了Velopack整合的便易性以及處理整個更新週期的完美能力。

他指出,開發者可以在Azure、文件儲存或網路儲存庫上託管這些發行文件,並且相同的自動更新邏輯仍然可以在Windows、Linux或macOS上使用。

簡化的維護和靈活性

Tim強調這個過程如何使桌面應用程式維護極其簡單。 開發者可以部署內部工具或公開軟體的完整自動更新功能,使用最小的配置和無外部依賴。

Velopack為.NET開發者提供了一個熟悉的API,並處理每一步:

  • 發布構建

  • 構建套件

  • 建立發行版

  • 應用更新

  • 清潔解除安裝

所有這些都無需複雜的構建流水線或深入的配置檔。

Tim稱Velopack是一個出色的工具,有助於開發者在提供精緻專業的軟體的同時節省寶貴的時間。 這是面向跨平台更新的框架,"只要運作即可"。

解除安裝和版本跟蹤

Tim演示安裝的應用程式顯示在Windows的"解除安裝或更改程式"列表中,顯示版本1.0.1。移除它很順暢——Velopack只需刪除這個文件夾,無任何剩餘物。

他補充說,Velopack不僅對WPF運作良好,對WinForms,UNO平台甚至舊的.NET Framework 4.6.2專案也同樣出色。 它也相容於其它流行的框架和語言如Rust或JavaScript,使其成為跨平台安裝程式的通用解決方案。

結論

在結尾部分,Tim表示對Velopack能帶來如此出色的效果感到極度驚艷。 僅需幾個步驟——安裝這個工具,新增一行程式碼,並運行兩個命令——開發者就可以從普通的.NET專案轉變為一個完全可安裝、自我更新、跨平台的應用程式。

他對為開發如此出色的工程而感謝Velopack的開發者,稱其可能是現存最佳的跨平台桌面應用程式安裝和更新框架。

Tim最後提醒觀看者,所有的細節、命令和源程式碼都在影片描述中提供。 他鼓勵開發者提出想法、請求功能並通過其公共程式碼庫為項目的未來做出貢獻。

Hero Worlddot related to using Velopack 快速部署和更新 C# 桌面應用程式
Hero Affiliate related to using Velopack 快速部署和更新 C# 桌面應用程式

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話