AutoUpdater.NET

autoupdaterdotnet
用於軟體自動更新,不再需要使用bat等等之類的方式
一個不錯的小套件適合用在不會太龐大的軟體上 AutoUpdater.NET
在NuGet上找到 並且安裝他 Autoupdater.NET.Official

  1. 先建立好 AutoUpdater.xml 後面會用到,建立的內容這邊引用官方範例 後續再詳細說明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
  2. 接著在你的APP進入端加入

    1
    using AutoUpdaterDotNET;
  3. 放到OnStartup,反正一開始就要檢查的

    1
    2
    3
    4
    5
    AutoUpdater.Mandatory = true;
    AutoUpdater.TopMost = true;
    AutoUpdater.ShowRemindLaterButton = false;
    AutoUpdater.Start("https://yourURL/AutoUpdater.xml");
    AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent;
  4. 建立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
    39
    private 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內 都好

autoupdaterdotnet