Shadowsocks Windows 中的更新系统负责检查、通知和促进应用程序新版本的安装。它会定期检查 GitHub 的新版本发布,比较版本号,并为用户提供下载更新或跳过特定版本的选项。
本文档涵盖了更新检查流程、用户界面和安装机制。有关存储更新偏好的配置系统的更多信息,请参阅 配置系统。
更新系统主要实现在 UpdateChecker 类中,该类与 Shadowsocks 架构中的其他组件集成,提供版本更新功能。
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs19-176
更新检查流程涉及连接到 GitHub API、检索发布信息、比较版本号以及通知用户可用更新。
此过程的核心是 CheckForVersionUpdate 方法,该方法会
当前版本在 UpdateChecker 类中定义为一个常量
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs52-90 shadowsocks-csharp/Controller/Service/UpdateChecker.cs36
更新系统使用 .NET 内置的 Version 类来比较版本。如果满足以下条件,则认为一个版本是较新的版本:
此外,系统还会跳过与用户“跳过的更新版本”偏好设置相符的发布版本。
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs69-74
当存在新版本时,系统会使用 VersionUpdatePromptView 类显示一个提示。此窗口提供有关发布版本的信息,并向用户提供选项。
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs96-113
与某些应用程序自动更新不同,Shadowsocks Windows 采用半自动化方法。
当用户选择更新时
DoUpdate 方法会下载所选版本的所有资产。Utils.GetTempPath() 保存到临时目录。来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs124-150
用户可以选择跳过特定的更新版本。此信息会存储在配置中,以防止再次提供相同的更新。
当用户跳过更新时
SkipUpdate 方法。skippedUpdateVersion 属性中。ShadowsocksController.SaveSkippedUpdateVerion 保存配置。来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs156-163
更新系统通过 ShadowsocksController 集成到应用程序生命周期中,该控制器在适当的时候启动更新检查。
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs19-176
应用程序的版本历史记录在 CHANGES 文件中跟踪,该文件记录了每个版本的特性、错误修复和改进。当前版本(截至文档)为 4.4.1.0,发布于 2022 年 2 月 8 日。
此历史记录对于用户了解版本之间的变更以及更新中可用的新特性或修复非常重要。
来源: CHANGES1-446
当前版本在多个地方定义以保持一致性:
UpdateChecker.cs 中作为常量。AssemblyInfo.cs 中(引用了 UpdateChecker 常量)。appveyor.yml 中用于构建系统。这确保了版本在整个应用程序和构建过程中保持一致。
// In UpdateChecker.cs
public const string Version = "4.4.1.0";
// In AssemblyInfo.cs
[assembly: AssemblyVersion(UpdateChecker.Version)]
// In appveyor.yml
version: 4.4.1.{build}
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs36 shadowsocks-csharp/Properties/AssemblyInfo.cs36 appveyor.yml14
更新系统使用由 ShadowsocksController 提供的 HttpClient 实例来向 GitHub API 发起请求。此客户端已配置适当的头部和设置,以便与 GitHub 进行通信。
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs41-42
更新系统在 Configuration 对象中存储了两个主要的配置选项:
| 选项 | 类型 | 目的 |
|---|---|---|
checkPreRelease | 布尔值 | 控制在检查更新时是否包含预发布版本。 |
skippedUpdateVersion | 字符串 | 存储用户选择跳过的版本。 |
这些选项通过配置系统进行管理,并在应用程序会话之间持久化。
来源: shadowsocks-csharp/Controller/Service/UpdateChecker.cs27-28 shadowsocks-csharp/Controller/Service/UpdateChecker.cs71-74