GeneralUpdate.Drivelution
命名空间: GeneralUpdate.Drivelution | 主要入口: GeneralDrivelution(静态类) | NuGet 包: GeneralUpdate.Drivelution
1. 组件简介
1.1 组件概述
GeneralUpdate.Drivelution 是面向驱动更新场景的跨平台组件。它把驱动更新中容易出错的步骤拆成统一流水线:平台识别 → 权限检查 → 文件验证(哈希/签名/兼容性) → 备份 → 安装 → 结果验证 → 失败后回滚,并在 Windows、Linux、macOS 上分别调用系统原生工具完成驱动安装。
驱动更新不是普通应用文件替换。应用文件通常只需要下载、解压、覆盖并重启进程;驱动更新会影响内核、设备节点、系统扩展或驱动仓库,因此必须额外关注管理员权限、签名可信度、目标系统和 CPU 架构、安装命令返回值、是否需要系统重启以及失败后的恢复路径。
核心能力:
| 能力 | 说明 |
|---|---|
| 跨平台抽象 | GeneralDrivelution.Create() 自动检测平台(Windows/Linux/macOS)创建对应实现 |
| 标准更新流水线 | 权限检查 → 文件验证(存在/哈希/签名/兼容性) → 备份 → 安装 → 验证 → 失败回滚 |
| 文件验证 | 文件存在检查、SHA256/MD5 哈希校验、Authenticode/GPG/codesign 签名校验、OS/架构兼容性检查 |
| 备份与回滚 | RequireBackup 默认为 true,失败后自 动回滚并保留备份路径供业务显式调用 RollbackAsync |
| Windows 安装 | 通过 pnputil.exe /add-driver /install 安装 INF 驱动包 |
| Linux 安装 | 支持 .ko(insmod/modprobe)、.deb(dpkg -i)、.rpm(rpm -ivh/dnf install) |
| macOS 安装 | 支持 .kext(kextload)、.dext(SystemExtensions)、.pkg(installer) |
| 批量更新 | BatchUpdateAsync 支持 BatchMode.Sequential 和 BatchMode.Parallel |
| 进度报告 | 通过 IProgress<UpdateProgress> 上报各步骤的进度、状态和消息 |
| 日志追踪 | GeneralTracer 默认控制台 + 按日期轮转文件输出 |
解决的业务痛点:
- 硬件厂商客户端需要随应用交付驱动更新,但不同 OS 驱动安装方式差异大
- 驱动安装需要管理员权限、签名校验、架构兼容性检查等多重保障
- 驱动安装失败后需要可靠的回滚机制,避免设备不可用
业务使用场景:
- 硬件厂商客户端:网卡、采集卡、USB 设备、虚拟设备驱动随应用一起交付
- 企业/工业现场:批量扫描驱动包并按清单更新
- 安装器/维护工具:统一处理 Windows/Linux/macOS 驱动差异
驱动更新 ≠ 普通文件替换
驱动更新会影响内核、设备节点、系统扩展或驱动仓库。必须关注:管理员权限、签名可信度、目标系统和 CPU 架构、安装命令返回值、是否需要系统重启以及失败后的恢复路径。生产环境中永远不要跳过哈希和签名校验。
1.2 环境与依赖
| 项目 | 说明 |
|---|---|
| 版本 | 10.5.0-beta.2 |
| 目标框架 | net8.0 / net10.0(多目标) |
| 依赖包 | Microsoft.Extensions.DependencyInjection、Microsoft.Extensions.Logging.Abstractions、Microsoft.Extensions.Options |
| 兼容性 | Windows(完整支持,需管理员权限)/ Linux(需 root/sudo)/ macOS(受 SIP 和系统扩展策略影响) |
2. 组件功能列表
| 功能名称 | 功能描述 | 类型 | 是否必填 | 备注限制 |
|---|---|---|---|---|
| 单驱动快速更新 | QuickUpdateAsync 使用默认策略快 速更新单个驱动 | 基础 | 可选 | 推荐生产环境使用自定义策略 |
| 自定义策略更新 | UpdateAsync 配合 UpdateStrategy 和 DrivelutionOptions | 基础 | 推荐 | 可控制备份、重试、超时、重启策略 |
| 驱动验证 | 文件存在、SHA256 哈希、签名、OS/架构兼容性检查 | 基础 | 可选 | ValidateAsync,可通过策略跳过部分校验 |
| 驱动备份 | 更新前备份驱动文件到指定路径 | 基础 | 自动 | RequireBackup 默认为 true |
| 驱动回滚 | 从备份路径恢复驱动 | 基础 | 可选 | RollbackAsync(backupPath) |
| 目录扫描 | 从目录扫描并解析驱动信息(.inf/.ko/.kext 等) | 基础 | 可选 | GetDriversFromDirectoryAsync |
| 批量更新 | 按清单批量更新,支持顺序/并行模式 | 拓展 | 可选 | BatchUpdateAsync |
| 平台信息查询 | 获取当前 OS/架构/版本/是否支持 | 基础 | 可选 | GetPlatformInfo() |
| 重启行为控制 | UpdateStrategy.RestartMode 设定重启意图 | 拓展 | 可选 | 更新流水线不会自动重启,需业务层调用 RestartHelper |
| DI 注册 | AddDrivelution 扩展方法注册平台服务 | 拓展 | 可选 | 支持 Generic Host / ASP.NET Core |
| 日志追踪 | GeneralTracer 运行时诊断日志 | 拓展 | 可选 | 默认开启,可关闭 |
3. API 配置说明
3.1 配置字段(属性 Props)
DriverInfo:
| 字段名 | 数据类型 | 默认值 | 是否必填 | 枚举/取值范围 | 说明 |
|---|---|---|---|---|---|
Name | string | "" | 是 | — | 驱动名称 |
Version | string | "" | 推荐 | SemVer 格式 | 驱动版本,扫描目录时会尽量从元数据读取 |
FilePath | string | "" | 是 | 有效文件路径 | Windows: .inf;Linux: .ko/.deb/.rpm;macOS: .kext/.dext/.pkg |
TargetOS | string | "" | 可选 | "Windows", "Linux", "MacOS" | 为空时不限制 OS |
Architecture | string | "" | 可选 | "x64"/"amd64"/"x86"/"arm64"/"arm" | 支持常见别名归一化;为空不限制 |
HardwareId | string | "" | 可选 | — | 硬件 ID 或模块别名 |
Hash | string | "" | 可选 | SHA256/MD5 哈希值 | 非空且 SkipHashValidation = false 时执行哈希校验 |
HashAlgorithm | string | "SHA256" | 可选 | "SHA256" / "MD5" | 哈希算法 |
TrustedPublishers | List<string> | new() | 可选 | — | 可信发布者列表,非空且未跳过签名校验时验证签名 |
Description | string | "" | 可选 | — | 驱动描述 |
ReleaseDate | DateTime | — | 可选 | — | 发布时间 |
Metadata | Dictionary<string, string> | new() | 可选 | — | 扩展元数据 |
UpdateStrategy:
| 字段名 | 数据类型 | 默认值 | 是否必填 | 枚举/取值范围 | 说明 |
|---|---|---|---|---|---|
RequireBackup | bool | true | 可选 | true / false | 是否执行备份步骤 |
BackupPath | string | "" | 推荐 | 有效目录路径 | 备份根路径,流水线在该路径下生成 backup_{Name}_{yyyyMMddHHmmss} |
RestartMode | RestartMode | Prompt | 可选 | None, Prompt, Delayed, Immediate | 重启意图,流水线不会自动重启系统 |
SkipHashValidation | bool | false | 可选 | true / false | 跳过哈希校验(仅调试/受控环境) |
SkipSignatureValidation | bool | false | 可选 | true / false | 跳过签名校验(仅调试/受控环境) |
TimeoutSeconds | int | 300 | 可选 | 正整数 | 单次更新超时,≤0 时使用 DrivelutionOptions.DefaultTimeoutSeconds |
RetryCount | int | 3 | 可选 | 正整数 | 重试次数(策略字段,实际重试来自 DrivelutionOptions) |
RetryIntervalSeconds | int | 5 | 可选 | 正整数 | 重试间隔秒数 |
Mode | UpdateMode | Full | 可选 | Full, Incremental | 更新模式 |
ForceUpdate | bool | false | 可选 | true / false | 是否强制更新 |
Priority | int | 0 | 可选 | — | 优先级 |
DrivelutionOptions:
| 字段名 | 数据类型 | 默认值 | 是否必填 | 说明 |
|---|---|---|---|---|
DefaultBackupPath | string | "./DriverBackups" | 可选 | 默认备份路径 |
DefaultRetryCount | int | 3 | 可选 | 默认重试次数 |
DefaultRetryIntervalSeconds | int | 5 | 可选 | 默认重试间隔 |
DefaultTimeoutSeconds | int | 300 | 可选 | 默认超时时间 |
DebugModeSkipSignature | bool | false | 可选 | 调试模式跳过签名 |
DebugModeSkipHash | bool | false | 可选 | 调试模式跳过哈希 |
ForceTerminateOnPermissionFailure | bool | true | 可选 | 权限失败时立即终止 |
AutoCleanupBackups | bool | true | 可选 | 自动清理旧备份 |
BackupsToKeep | int | 5 | 可选 | 保留备份数量 |
UseExponentialBackoff | bool | false | 可选 | 是否使用指数退避 |
3.2 实例方法
GeneralDrivelution(静态类):
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
|---|---|---|---|
Create(DrivelutionOptions?) | options — 全局选项 | 创建当前平台的驱动更新器 | 自动检测平台 |
Create(IServiceProvider) | serviceProvider — DI 容器 | 从 DI 容器解析 | 未注册时回退到自动平台创建 |
QuickUpdateAsync(DriverInfo, UpdateStrategy?, IProgress<UpdateProgress>?, CancellationToken) | driverInfo — 驱动信息;strategy — 可选策略(null 时使用默认);progress — 进度报告;ct — 取消令牌 | 快速单驱动更新 | 使用安全默认策略 |
ValidateAsync(DriverInfo, CancellationToken) | driverInfo — 驱动信息;ct — 取消令牌 | 单独验证驱动文件 | — |
GetPlatformInfo() | 无 | 查询当前平台信息 | 返回 OS/架构/版本/是否支持 |
GetDriversFromDirectoryAsync(string, string?, CancellationToken) | directoryPath — 目录路径;searchPattern — 搜索模式;ct — 取消令牌 | 扫描目录解析驱动信息 | 默认搜索模式与平台相关 |
BatchUpdateAsync(IEnumerable<DriverInfo>, UpdateStrategy, BatchMode, IProgress<UpdateProgress>?, CancellationToken) | drivers — 驱动列表;strategy — 更新策略;mode — 顺序/并行;progress — 进度;ct — 取消令牌 | 批量更新多个驱动 | 并行模式下底层系统工具可能竞争资源 |
IGeneralDrivelution:
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
|---|---|---|---|
UpdateAsync(...) | 同 QuickUpdateAsync | 执行完整更新流水线 | — |
ValidateAsync(...) | 同 GeneralDrivelution.ValidateAsync | 单独验证 | — |
BackupAsync(DriverInfo, string, CancellationToken) | driverInfo, backupPath, ct | 单独备份驱动文件 | — |
RollbackAsync(string, CancellationToken) | backupPath — 备份路径;ct — 取消令牌 | 从备份恢复驱动 | 不同平台恢复逻辑不同 |
GetDriversFromDirectoryAsync(...) | 同 GeneralDrivelution | 扫描目录 | — |
BatchUpdateAsync(...) | 同 GeneralDrivelution | 批量更新 | — |
3.3 回调事件
Drivelution 通过 IProgress<UpdateProgress> 报告进度,不提供独立的事件系统。
| 进度字段 | 类型 | 说明 |
|---|---|---|
CurrentStatus | UpdateStatus | 当前状态(Validating/BackingUp/Updating/Verifying/Succeeded/Failed/RolledBack) |
StepName | string | 当前步骤名称 |
Percentage | int | 进度百分比 (0-100) |
Message | string | 进度消息 |
StepIndex | int | 当前步骤索引 |
TotalSteps | int | 总步骤数 |