AutoUpdater.NET
用於軟體自動更新,不再需要使用bat等等之類的方式
一個不錯的小套件適合用在不會太龐大的軟體上 AutoUpdater.NET
在NuGet上找到 並且安裝他 Autoupdater.NET.Official
先建立好 AutoUpdater.xml 後面會用到,建立的內容這邊引用官方範例 後續再詳細說明
1
2
3
4
5
6
7
8
9
10
11
<item>
<!--版本號 必須大於本機版本 才會有作用-->
<version>2.0.0.0</version>
<!--打包好的更新檔-->
<url>https://rbsoft.org/downloads/AutoUpdaterTest.zip</url>
<!--你想顯示在更新畫面內的更新資訊-->
<changelog>https://github.com/ravibpatel/AutoUpdater.NET/releases</changelog>
<!--如果不想要給使用者跳過 就設定為true-->
<mandatory>false</mandatory>
</item>接著在你的APP進入端加入
1
using AutoUpdaterDotNET;
放到OnStartup,反正一開始就要檢查的
1
2
3
4
5AutoUpdater.Mandatory = true;
AutoUpdater.TopMost = true;
AutoUpdater.ShowRemindLaterButton = false;
AutoUpdater.Start("https://yourURL/AutoUpdater.xml");
AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent;建立AutoUpdater_ApplicationExitEvent 把行為放在裡面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39private void AutoUpdater_ApplicationExitEvent()
{
string zipPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "update.zip");
string extractPath = AppDomain.CurrentDomain.BaseDirectory;
// 解壓縮zip文件
using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
// 計算解壓縮路徑
string destinationPath = Path.GetFullPath(Path.Combine(extractPath, entry.FullName));
// 確保路徑在目標目錄內,以避免路徑遍歷漏洞
if (!destinationPath.StartsWith(extractPath, StringComparison.Ordinal))
throw new InvalidOperationException("嘗試解壓縮到無效的目錄");
// 判斷是否為目錄
if (Path.GetFileName(destinationPath).Length == 0)
{
// 這是一個目錄
Directory.CreateDirectory(destinationPath);
}
else
{
// 這是一個文件
Directory.CreateDirectory(Path.GetDirectoryName(destinationPath));
entry.ExtractToFile(destinationPath, true);
}
}
}
// 刪除下載的zip文件
File.Delete(zipPath);
// 重新啟動應用程式
System.Diagnostics.Process.Start(System.Windows.Application.ResourceAssembly.Location);
System.Windows.Application.Current.Shutdown();
}
這樣就完成一個基本的套用流程啦,或者你可以放在一個button內 都好