You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

第二次尝试更新时触发无效签名异常,寻求技术排查思路

问题

在Avalonia应用中使用NetSparkleUpdater 3.0.4版本,配置代码如下:

_sparkle = new SparkleUpdater(
    "https://storage.example.org/appcast.xml", 
    new Ed25519Checker(NetSparkleUpdater.Enums.SecurityMode.Strict, "SECRET")
)
{
    RelaunchAfterUpdate = true,
    CustomInstallerArguments = "/S"
};
_sparkle.UpdateDetected += async (s, e) =>
{
    if (_updateInProgress) return;
    _updateInProgress = true;

    await Dispatcher.UIThread.InvokeAsync(async () =>
    {
        var item = e.AppCastItems[0];
        var vm = new UpdateViewModel(_sparkle, item);
        var dialog = new UpdateDialog();
        vm.ParentWindow = dialog;
        dialog.DataContext = vm;
        await dialog.ShowDialog(this);
        vm.Dispose();

        if (!vm.IsInstalling)
        {
            _updateInProgress = false;
        }
    });
};
await _sparkle.StartLoop(true, true);

该配置在多数电脑上运行正常,但有一台电脑几乎总是更新失败,日志如下:

24.04.2026 15:16:56 : [Autoupdate] Starting update process
24.04.2026 15:17:01 : [Autoupdate] Download finished: C:\Users\XXX\AppData\Local\Temp\Update_2.0.46.exe
24.04.2026 15:17:01 : [Autoupdate] Preparing to exit
24.04.2026 15:17:23 : [Autoupdate] Starting update process
24.04.2026 15:17:23 : [Autoupdate] Download started: C:\Users\XXX\AppData\Local\Temp\Update_2.0.46.exe
24.04.2026 15:17:49 : [Autoupdate] Download error: Downloaded file has invalid signature!
UpdateViewModel OnDownloadHadError 0
SparkleUpdater OnDownloadFinished 0
<StartFileDownloadAsync>d__36 MoveNext 0
AsyncStateMachineBox`1 ExecutionContextCallback 0
24.04.2026 15:18:21 : [Autoupdate] Cancelling update process

用户视角表现为:更新弹窗确认后应用尝试重启,但后续会自动再次下载文件(无用户交互),并触发签名无效错误。

排查思路

  • 临时文件完整性校验:检查故障电脑中C:\Users\XXX\AppData\Local\Temp\Update_2.0.46.exe的实际大小,与appcast.xml里声明的文件大小对比。如果不一致,说明下载过程中文件被截断或篡改,可能是网络波动、安全软件拦截修改导致。
  • 签名验证环境排查:对比正常电脑和故障电脑的.NET运行时版本、系统补丁情况,确保两者环境一致。Ed25519签名验证依赖系统加密库,故障电脑可能缺少相关组件或存在版本兼容问题。
  • 重启逻辑冲突检查:日志显示应用退出后自动重启并重复触发更新,排查RelaunchAfterUpdate配置是否与自定义更新流程冲突。尝试关闭该配置,手动处理应用重启,避免重复触发更新检测。
  • 临时文件状态排查:故障电脑的临时文件可能在首次下载后未被正确清理,或被其他进程锁定,导致二次下载时文件损坏。可在更新流程中添加临时文件清理逻辑,或指定新的临时文件路径测试。
  • 安全软件拦截排查:检查故障电脑上的杀毒软件、防火墙或EDR工具,是否在下载完成后修改了安装包。可临时禁用安全软件测试更新是否正常,或把应用及临时更新目录加入白名单。
  • Appcast缓存清理:检查NetSparkle在故障电脑上的缓存目录(通常在AppData\Roaming下对应应用的文件夹),是否缓存了旧的appcast.xml数据,导致使用错误的签名信息。手动清除缓存后强制重新获取最新appcast.xml。
  • NetSparkle版本升级:考虑将NetSparkleUpdater升级到最新稳定版,3.0.4可能存在特定场景下的签名验证或重启逻辑bug,新版本大概率已修复此类问题。

内容的提问来源于stack exchange,提问作者nKognito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 18:34:51