菜单

更新系统

相关源文件

v2rayN 中的更新系统负责保持应用程序、其代理核心、地理数据文件和服务器订阅的最新状态。本文档详细介绍了 v2rayN 如何处理各种组件的更新、更新系统的架构以及相应的更新工作流程。

概述

v2rayN 更新系统管理以下组件的更新:

  • v2rayN 应用程序 - 客户端软件本身
  • 代理核心 - 各种代理引擎(v2fly、Xray、sing_box、mihomo)
  • 地理数据文件 - 用于路由规则的地理数据文件
  • 订阅 - 来自订阅 URL 的服务器配置

通过统一的界面,用户可以检查更新、下载并应用它们,以确保应用程序保持最新的功能和安全补丁。

架构

更新系统采用分层架构,具有明确定义的职责。

来源:v2rayN/ServiceLib/Services/UpdateService.cs1-617 v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs1-315 v2rayN/ServiceLib/Services/DownloadService.cs1-312 v2rayN/AmazTool/UpgradeApp.cs1-116

更新工作流

更新过程对所有组件都遵循一致的模式。

来源:v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs76-117 v2rayN/ServiceLib/Services/UpdateService.cs12-236

核心组件

UpdateService (更新服务)

协调所有更新操作的核心组件

  • 检查 v2rayN、代理核心、地理数据文件和订阅的更新
  • 比较版本以确定是否需要更新
  • 协调下载和应用更新
  • 通过回调提供反馈

关键方法

  • CheckUpdateGuiN - 处理 v2rayN 应用程序更新
  • CheckUpdateCore - 管理代理核心(v2fly、Xray 等)的更新
  • UpdateGeoFileAll - 更新地理数据文件
  • UpdateSubscriptionProcess - 更新服务器订阅

来源:v2rayN/ServiceLib/Services/UpdateService.cs12-616

CheckUpdateViewModel (检查更新视图模型)

管理更新流程的用户界面交互

  • 向用户展示更新选项
  • 跟踪更新进度
  • 下载后应用更新
  • 根据需要重启应用程序组件

来源:v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs22-314

DownloadService (下载服务)

处理与更新相关的所有网络操作

  • 从远程服务器下载文件
  • 管理 HTTP 连接和代理
  • 提供进度反馈
  • 处理连接测试

来源:v2rayN/ServiceLib/Services/DownloadService.cs11-311

更新流程详解

应用程序更新流程

  1. CheckUpdateViewModel 调用 UpdateService.CheckUpdateGuiN
  2. UpdateService 检查 GitHub 上的最新版本
  3. 如果存在更新版本,则下载更新包
  4. 调用 CheckUpdateViewModel.UpgradeN() 来应用更新
  5. 将更新包传递给 AmazTool,后者会:
    • 解压缩包
    • 替换应用程序文件
    • 重启 v2rayN

更新过程使用一个名为 AmazTool 的独立工具来处理主应用程序运行时可能的文件替换。

来源:v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs150-166 v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs218-238 v2rayN/AmazTool/UpgradeApp.cs9-115

核心更新流程

  1. CheckUpdateViewModel 调用 UpdateService.CheckUpdateCore 并传入核心类型
  2. UpdateService 将远程版本与已安装版本进行比较
  3. 如果存在更新版本,则下载核心包
  4. CheckUpdateViewModel.UpgradeCore() 将核心包解压缩到相应的 bin 目录
  5. 当 v2rayN 下次启动连接时,核心即可使用

来源:v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs168-186 v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs240-293 v2rayN/ServiceLib/Services/UpdateService.cs53-105

地理数据文件更新流程

  1. CheckUpdateViewModel 调用 UpdateService.UpdateGeoFileAll
  2. UpdateService 从配置的源下载最新的地理数据文件
  3. 文件被复制到 bin 目录中的目标位置
  4. 流程包括更新
    • geosite.dat - 基于域的路由数据
    • geoip.dat - 基于 IP 的路由数据
    • 其他专用地理数据文件
    • SRS (Singbox 规则集) 文件

来源:v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs133-147 v2rayN/ServiceLib/Services/UpdateService.cs238-616

订阅更新流程

  1. 用户通过 UI 发起订阅更新
  2. 系统调用 UpdateService.UpdateSubscriptionProcess
  3. 对于每个已启用的订阅
    • 从订阅 URL 下载最新的服务器配置
    • 处理数据(处理 Base64 编码等)
    • 如果指定了,则应用转换
    • 更新配置中的服务器列表
    • 通知用户更新成功

来源:v2rayN/ServiceLib/Services/UpdateService.cs107-236

配置设置

更新系统可通过多个选项进行配置:

设置描述
CheckPreReleaseUpdate (检查预发布更新)是否在更新检查中包含预发布版本
SelectedCoreTypes (选定的核心类型)在更新检查中包含哪些核心
GeoSourceUrl (地理数据源 URL)地理数据文件的自定义 URL
SrsSourceUrl (SRS 源 URL)Singbox 规则集文件的自定义 URL
SubConvertUrl (订阅转换 URL)订阅转换服务的 URL

这些设置存储在应用程序的配置中,并通过设置 UI 进行管理。

来源:v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs32-38 v2rayN/ServiceLib/Services/UpdateService.cs486-488 v2rayN/ServiceLib/Services/UpdateService.cs566-568

跨平台考量

更新系统旨在跨不同平台运行。

  • Windows:更新时使用直接文件操作。
  • Linux/macOS:更新后设置适当的文件权限。
  • 特定架构:为 x64/arm64 架构下载相应的文件。

系统会检测平台和架构,以确保下载正确的文件。

来源: v2rayN/ServiceLib/Services/UpdateService.cs426-475 v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs278-285

总结

更新系统是 v2rayN 的关键组成部分,可确保用户能够获取最新的功能、安全补丁和地理数据。它为更新应用程序的所有组件提供了一个统一的界面,同时处理特定于平台的manages并跨不同环境维护一致的用户体验。