🔧 GeneralUpdate 高级定制参考
涵盖扩展点架构、Pipeline 管道、差分引擎、Bowl 崩溃守护、事件系统、文件系统工具等。
⚠️ API 版本说明:本指南基于 NuGet v10.5.0-beta.7。 以下功能在 v10.5.0-beta.7 中全部可用:
- ✅
IUpdateHooks生命周期钩子(Hooks<T>())- ✅
IStrategy自定义策略注入(Strategy<T>())- ✅
SilentPollOrchestrator静默轮询器(Option.Silent)- ✅
Option可编程配置系统- ✅
ISslValidationPolicySSL 策略接口- ✅
IHttpAuthProviderHTTP 认证提供者- ✅
DiffPipelineBuilder差分管道配置各功能的命名空间和用法在文中已标注。
📋 用户需求提取
### 定制目标(必需)
- 需要什么定制: ______(Bowl 崩溃守护 / IPC 替换 / Pipeline 定制 / 自定义策略 / AOT / Drivelution / 黑名单 / 认证提供者 / 差分引擎)
- 使用的 GeneralUpdate 版本: ______(v10.4.6 稳定版 / v10.5.0+ 开发分支)
- .NET 版本: ______(.NET 6/8/9/10)
### Bowl(如果选择)
- 被监控进程名: ______
- 工作模式: ______(Normal / Upgrade)
- 是否需要崩溃 Dump: ______(是/否)
- 备份目录路径: ______
### IPC 替换(如果选择)
- 替换方式: ______(NamedPipe / SharedMemory / 自定义)
- 目标平台: ______(Windows / Linux / macOS / 跨平台)
- 安全要求: ______(加密 / 签名 / 无额外安全)
### AOT(如果选择)
- 当前剪裁警告: ______(有/无)
- 是否使用反射: ______(是/否)
- JSON 序列化需求: ______(有/无)
1. Pipeline 管道系统(v10.5.0-beta.7 可用)
GeneralUpdate 使用 Pipeline 管道模式处理更新包的校验、解压、补丁应用。
PipelineBuilder API
using GeneralUpdate.Core.Pipeline;
// 创建管道上下文
var context = new PipelineContext();
context.Add("ZipFilePath", @"C:\temp\update.zip");
context.Add("Hash", "sha256-hex-value");
context.Add("Format", 0); // 0=Zip
context.Add("Encoding", System.Text.Encoding.UTF8);
context.Add("SourcePath", @"C:\Program Files\MyApp");
context.Add("PatchEnabled", true);
// 构建并执行管道
await new PipelineBuilder(context)
.UseMiddleware<HashMiddleware>() // 哈希校验
.UseMiddleware<CompressMiddleware>() // 解压
.UseMiddleware<PatchMiddleware>() // 差分补丁
.Build();
| 中间件 | 类名 | 命名空间 | 功能 |
|---|---|---|---|
| 哈希校验 | HashMiddleware | GeneralUpdate.Core.Pipeline | SHA256 完整性校验 |
| 解压 | CompressMiddleware | GeneralUpdate.Core.Pipeline | 解压 ZIP 包 |
| 差分补丁 | PatchMiddleware | GeneralUpdate.Core.Pipeline | 应用 BSDIFF/HDiffPatch 补丁 |
| 驱动更新 | DrivelutionMiddleware | GeneralUpdate.Core.Pipeline | Windows 驱动安装 |
2. 策略系统(v10.5.0-beta.7 可用)
GeneralUpdate 内置三种平台策略,通过 IStrategy 接口实现:
| 策略 | 类名 | 平台 |
|---|---|---|
| Windows | WindowsStrategy | Windows |
| Linux | LinuxStrategy | Linux |
| OSS | OSSStrategy | 跨平台(对象存储) |
✅ 支持通过
bootstrap.Strategy<T>()注入自定义策略。 自定义策略需要实现IStrategy接口。
3. Bowl 崩溃守护(v10.5.0-beta.7)
Bowl 是一个崩溃监控组件,通过 BowlContext 配置。
using GeneralUpdate.Bowl;
var context = new BowlContext
{
ProcessNameOrId = "MyApp.exe",
DumpFileName = "v1.0.0.0_fail.dmp",
FailFileName = "v1.0.0.0_fail.json",
TargetPath = @"C:\Program Files\MyApp",
FailDirectory = @"C:\Program Files\MyApp\fail",
BackupDirectory = @"C:\Program Files\MyApp\backup",
WorkModel = "Upgrade",
TimeoutMs = 30_000,
AutoRestore = true,
OnCrash = async (info, ct) => Console.WriteLine($"Crash: {info.DumpFilePath}"),
};
var bowl = new Bowl();
var result = await bowl.LaunchAsync(context);
Console.WriteLine($"Result: Success={result.Success}, Restored={result.Restored}");
| 属性 | 类型 | 说明 |
|---|---|---|
ProcessNameOrId | string | 被监控的进程名或 PID(必填) |
TargetPath | string | 应用安装根目录(必填) |
DumpFileName | string | Dump 文件名(必填) |
FailFileName | string | 故障报告文件名(必填) |
FailDirectory | string | 崩溃报告输出目录(必填) |
BackupDirectory | string | 备份目录(必填) |
WorkModel | string | "Upgrade" 或 "Normal" |
TimeoutMs | int | 监控超时(毫秒),默认 30000 |
AutoRestore | bool | 崩溃后自动回滚 |
DumpType | DumpType | Mini / Full |
OnCrash | delegate | 崩溃回调 |
⚠️ NuGet v10.5.0-beta.7 中 Bowl 和 Core 无类型冲突,可以同时引 用。
4. EventManager 事件系统(v10.5.0-beta.7 可用)
EventManager 是一个全局单例,提供事件的发布和订阅:
using GeneralUpdate.Core.Event;
// 添加监听
EventManager.Instance.AddListener((object? sender, UpdateInfoEventArgs e) =>
{
// 处理版本发现事件
});
// 手动分发事件
EventManager.Instance.Dispatch(this, new ExceptionEventArgs(ex, "自定义错误"));
// 清空所有监听
EventManager.Instance.Clear();
// 释放
EventManager.Instance.Dispose();
⚠️ EventManager 是全局单例,
Dispose()后Instance仍然可访问。