Repository navigation
Replies: 1 comment
Third occurrence — 2026-11-04,
|
| time | path | event |
|---|---|---|
| 11-04 22:08:00–06 | updater\pending\deepseek-harness-0.2.2-rc.1-win-x64.exe (293,425,336 B) |
update downloaded |
| 11-04 22:20:26–30 | %APPDATA%\...\plugin-operations\operations.jsonl |
8 plugin install/remove records (dsh-cost-meter 1.9.55, all failed) — unrelated to the crash, listed only because the crash log surfaces them |
| 11-04 22:21:01 | crash-2026-11-04T14-21-01-845Z-host.log |
host fatal, runtime missing |
| 11-04 22:22:52 | D:\dsh\resources\runtime |
recreated by the manual reinstall |
| 11-04 22:23:22 | processes | app restarted, running normally |
3. The smoking gun: every file kept its old timestamp but got a new CreationTime
D:\dsh after the failed update (before manual reinstall, surviving into the reinstalled state):
DeepSeek Harness.exe LastWriteTime 2026/11/4 17:30:40 CreationTime 2026/11/4 22:22:53
resources\app.asar LastWriteTime 2026/11/4 17:30:40 CreationTime 2026/11/4 22:22:54
resources\runtime LastWriteTime 2026/11/4 17:30:40 CreationTime 2026/11/4 22:22:52
i.e. the new build was written at 17:30:40 (that is the mtime baked into the package), the installer re-created the whole tree at 22:22:52 — and yet resources\runtime ended up empty at 22:21 when the host started.
4. Again zero installer logs
%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer-logs\ still contains only the two files from 2026-10-17. The 11-04 update produced no record at all, exactly like 10-30.
5. Cache payload is again fine
installer.exe 293,425,336 B 2026-11-04 22:08:04
pending\deepseek-harness-0.2.2-rc.1-win-x64.exe 293,425,336 B 2026-11-04 22:08:04
pending\update-info.json {"fileName":"deepseek-harness-0.2.2-rc.1-win-x64.exe",
"sha512":"swcK0J6ofGkaAWLRpOes2ca7CWO8vuM5Vp0FRnQ/DG3q+Z+OhvsgLz3hIiSYpRUETY+fEz+Ww86fNa0jiVIifw==",
"isAdminRightsRequired":false}
Same package, manual run → works. So the payload is never the problem; the update path is.
6. Healthy state verified afterwards
runtime: D:\dsh\resources\runtime
files=6144 size=256.2 MB office-skills\office\SKILL.md = present
DeepSeek Harness processes: 2 (shell + host), started 22:23:22
new crash logs after restart: none
Why this keeps happening (and why it will keep happening)
Three releases in a row, same failure, zero logs, and the same manual workaround. Nothing in the 0.2.2-rc.1 packaging changed the behaviour, which suggests the update path has no post-install verification at all: NSIS returns success even when it could not replace directories that the still-running app/host holds open, and the updater restarts the app regardless.
The two concrete asks, repeated from the original report and now backed by three occurrences:
- Verify after install, before restart. If
resources\runtime\versions.json,bin\,primary-runtime\oroffice-skills\office\SKILL.mdare missing (or file count is below ~6,000), treat the update as failed, roll back to the previous directory, return a non-zero exit code, and tell the user — do not restart into a broken install. - Never leave a half-replaced install directory. Extract into
<install>.new-{GUID}, verify, then swap with two renames. A failed update then leaves the old, working install untouched.
Plus the two smaller ones: write installer-logs for silent installs too (three failures now have no installer-side record), and make the host degrade gracefully instead of fatal when the runtime payload is missing (dsh-skill-office/lib/index.js:64 currently kills the whole host before the UI can load, so the user cannot even see what went wrong or reach a repair entry point).
If it would help, I'm happy to test a candidate build, run a reproduction with tracing enabled, or hand over the small check-and-repair script I wrote for the community in the meantime — just say which.
Uh oh!
There was an error while loading. Please reload this page.
Summary
桌面版应用内升级后,安装目录
D:\dsh\resources\runtime被装成空目录(正常应为 6,148 个文件 / 257.3 MB),下次启动宿主直接 fatal,界面只显示 "DeepSeek Harness is unavailable",用户无法进入应用、也看不到日志。到目前共发生 3 次:2026-10-24(0.2.1-rc.3)一次、2026-10-30(0.2.1-rc.5)两次。
关键点:用同一份更新器缓存里的安装包手动原位重装(
%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer.exe /S /D=D:\dsh)可以立刻恢复全部 6,148 个文件,应用随即正常启动 —— 所以安装包本身没问题,问题出在"升级路径"(很可能是应用/宿主仍占用安装目录时替换文件失败,而失败被当成了成功)。Reproduction
0.2.1-rc.5;resources\runtime为空目录。rc.3 那次(10-24)同样如此。手动重装之后再次触发更新 应该能复现(我这边的环境已经修好,暂不方便再造一次,如果官方需要我可以配合复现)。
Current behavior
%APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-2026-10-30T02-18-27-675Z-host.log、crash-2026-10-30T02-19-02-060Z-host.log:%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer-logs\里没有留下任何记录(静默失败,连现场都没有)。%APPDATA%\@deepseek-ai\dsh-desktop下的会话/配置)没有丢失,坏的只有程序目录里的resources\runtime。Expected behavior
installer-logs。Environment
CurrentBuild 26200,UBR 9457@deepseek-ai/dsh-desktop0.2.1-rc.5(另一次 0.2.1-rc.3)D:\dshresources\runtime= 6,148 个文件 / 257.3 MB%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater以下是完整证据、时间线与修复建议。
环境
CurrentBuild 26200,UBR 9457@deepseek-ai/dsh-desktop0.2.1-rc.5(另一次是 0.2.1-rc.3)D:\dshresources\runtime= 6,148 个文件 / 257.3 MB(Get-ChildItem -Recurse -File口径;`find%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater症状
D:\dsh\resources\runtime是空目录(或只有部分内容)。%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer.exe /S /D=D:\dsh)→ 立刻恢复 6,148 个文件 / 257.3 MB → 应用正常启动(5 个进程,窗口与 UI 正常,无新崩溃日志)。用户数据(
%APPDATA%\@deepseek-ai\dsh-desktop下的会话、配置)没有丢,坏掉的只有程序目录里的resources\runtime。发生记录
runtime空runtime空证据
1. 宿主 fatal 日志(
%APPDATA%\@deepseek-ai\dsh-desktop\logs\)crash-2026-10-30T02-18-27-675Z-host.log与crash-2026-10-30T02-19-02-060Z-host.log:同一错误在 10-24 的
crash-2026-10-24T06-23-29-363Z-host.log(0.2.1-rc.3)中完全相同 —— 不是 rc.5 回归,是长期存在的升级路径问题。2.
resources\runtime目录本身的时间戳即 10 月 29 日 22:02 是一次正常安装;10 月 30 日 10:13~10:14 的自动更新把目录清掉了,10:20 手动重装才恢复。
3. 安装器自己记录的同类失败(
...\updater\installer-logs\directory-failure-*.log)外加 10 条 backup 尝试(
error 5×5、error 32×5)。另一份
directory-failure-20261017-175542.log:这类"目录被占用 → 改名/替换失败"的失败模式与本次症状吻合:安装器试图把
D:\dsh整个改名成D:\dsh.old-{GUID}再放新目录,失败后安装目录处于半损坏状态,而resources\runtime这种"后解压"的目录就成了空的。4. 2026-10-30 那次失败没有留下任何安装器日志
installer-logs\里只有 10 月 17 日的两个文件,10 月 30 日的两次升级一条都没有。也就是说这次失败在日志里完全静默 —— 只能从宿主崩溃日志反推出来。这一点单独就值得修:静默安装/更新路径必须记录自己的失败。5. 缓存中的安装包是好的
同一个包手动跑一次就装好了 → 包没问题,是"什么时候、以什么方式跑它"有问题。
复现路径(推测,与日志时间线一致)
installer.exe /S原位升级。D:\dsh下文件;此时应用/宿主仍持有resources\app.asar、resources\runtime里的文件 →MoveFileExW失败(error 32 / 5)。resources\runtime\office-skills\office\SKILL.md→ ENOENT →DesktopHostFatalError→ UI 只显示 "DeepSeek Harness is unavailable"。建议的修复
按性价比排序:
app.quit()就立刻跑安装器:要等所有进程(含 Electron helper、host 子进程)消失,并确认resources\app.asar不再被占用(可以试着重命名探测);超时就中止升级并提示"请手动退出 DeepSeek Harness 后重试",而不是硬着头皮装。resources\runtime\versions.json、bin\、office-skills\office\SKILL.md是否存在、文件数是否达到阈值(约 6,000)。不达标:把.old目录换回去或报错,退出码非 0,让更新器不要把这次更新当成功。D:\dsh.new-{GUID},校验通过后再两次 rename 交换。这样即使中途失败,安装目录也还是完整的旧版本,不会出现"空 runtime"。installer-logs。 10-30 那两次一条日志都没有,等于把唯一的现场销毁了。dsh-skill-office在readFileSync处直接把整个宿主打挂(lib/index.js:64),用户既进不去应用、也看不到日志。建议降级:office skill 标记为不可用、给一条明确的错误("runtime 缺失,请重新运行安装包"),并提供一个自检/修复入口;至少要让应用能起来。附:我这边的临时兜底
在找到根因之前我写了个一键"检查 + 修复"脚本,供其他遇到同样问题的用户自救:
resources\runtime的关键文件与文件数/体积阈值;如果官方愿意,我可以把它整理成 PR 或直接提供脚本。
附件(可选,如需要我提供):两份 fatal 日志、两份 10-17 安装器失败日志、
update-info.json、resources\runtime目录时间戳截图。All reactions