🐛[BUG] 账号切换-「创建桌面快捷方式」导致程序直接闪退(头像无法加载的账号/没有设置steam头像,默认'?'头像)

Aperta
#4,158 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
csharp
Ambito
backend, desktop

Direzione di ricerca

Start with src/BD.WTTS.Client.Plugins.GameAccount/Models/PlatformAccount.cs, especially CreateShortcut(IAccount acc) and the existing error handling in nearby commands. Check how avatar decoding handles missing, invalid, or unavailable images, and run the relevant shortcut or account tests if present. Done means shortcut creation failures show an error and do not exit the application; accounts without a usable avatar should also be handled safely.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
🐛 描述

在「账号切换(Steam)」页,对某个账号点「⋯ → 创建桌面快捷方式」,Watt Toolkit 进程立即退出:没有报错弹窗、托盘图标消失、日志里没有异常记录、Windows 事件查看器里也没有 Application Error。

影响版本:3.1.0(Steam++.exe 文件版本 3.1.2025.0,自带 .NET 10.0.3 运行时)。develop 分支代码同样存在该问题。

定位到的代码(3.1.0 tag):
src/BD.WTTS.Client.Plugins.GameAccount/Models/PlatformAccount.cs → public async void CreateShortcut(IAccount acc)

问题点:

  1. 该方法是 async void,方法体只有 try/finally、没有 catch;而同文件其它命令(SwapToAccountCommand、DeleteAccountCommand 等)都有 try/catch 或 Toast.LogAndShowT(ex)。
  2. 方法内 await Decode(acc.AvatarMedium) 会用 new HttpClient().GetStreamAsync(url) 当场下载头像,没有超时/重试/异常处理;网络失败抛 HttpRequestException,返回内容不是图片时 SKBitmap.Decode 返回 null,紧接着 avatarImgBitmap.Width 就是 NRE。未设置头像(null)、本地头像文件被删,同样会走到这条失败路径。
  3. iconSize.Max() 在头像尺寸小于 16px 时序列为空,抛 InvalidOperationException;Path.Combine(PlatformLoginCache, acc.AccountName!, "Icon") 在 AccountName 为空时抛 ArgumentNullException。
  4. 上述异常从 async void 逃逸到 UI 线程,直接把进程带走 —— 所以表现为"闪退 + 无日志 + 无 WER 记录"。

复现情况:头像/路径链路拿不到可用头像时(显示「?」、未设置头像、缓存被删、下载失败)点这一项都会闪退;头像正常的账号可以成功创建(桌面生成 .lnk,目标 spp://args/-clt+steam+-account+<AccountName>,图标写到 ...\LoginData\Steam\<AccountName>\Icon\<guid>.ico)。

📷 复现步骤
  1. 打开 Watt Toolkit 3.1.0,进入「账号切换」→ Steam 标签页
  2. 找一个头像显示为「?」或未设置头像的账号
  3. 点该卡片右下角「⋯」→「创建桌面快捷方式」
  4. 程序窗口与托盘图标瞬间消失,无任何提示;%TMP%\Steam++\Logs\nlog-all-<日期>.log 中没有任何对应异常

对照:对头像正常显示的账号执行同一步骤,可以正常生成桌面快捷方式。

📄 日志信息

日志路径:%TMP%\Steam++\Logs\nlog-all-2026-11-07.log(崩溃时刻无任何 Error 级记录,以下为当天全部内容)

2026-11-07 17:37:40.2423|Error|SteamworksLocalApiS|Initialize fail. | SAM.API.ClientInitializeException: failed to create pipe
   at SAM.API.Client.Initialize(Int64 appId)
   at BD.SteamClient.Services.Implementation.SteamworksLocalApiServiceImpl.Initialize()
2026-11-07 17:44:13.3441|Error|SteamworksLocalApiS|Initialize fail. | SAM.API.ClientInitializeException: failed to create pipe
...(同一段重复 5 次,时间分别为 17:37:40 / 17:44:13 / 17:45:28 / 17:46:24 / 17:47:00)

(这条 Steamworks 错误与本次问题无关,只是说明崩溃前后主程序重复启动过。)

🚑 其他信息
  • 处理器体系结构:x64
  • 系统版本号:Windows 11 Pro 25H2(10.0.26200.9445)
  • 下载渠道:官网
  • 程序版本:3.1.0(3.1.2025.0)
  • 是否包含独立运行时:包含(D:\Steam++\dotnet\shared\Microsoft.NETCore.App\10.0.3)
  • 其他:安装有火绒安全软件,查看过无拦截提示;桌面上存在同功能成功生成的 .lnk 可作对照
期望行为

创建快捷方式失败时应提示错误,不应导致整个程序退出。

建议修复

给 CreateShortcut 加 try/catch(异常走 Toast.LogAndShowT),并对 Decode() 失败/解码为 null 的情况回退到内置 avares://BD.WTTS.Client.Avalonia/UI/Assets/avatar.jpg。

Lingua principale
C#
Stelle
27.5k
Fork
1.8k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di BeyondDimension/SteamTools

Tutte le issue di BeyondDimension/SteamTools

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.