You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
环境
10.0.26200.9974),x64,zh-CN%LOCALAPPDATA%\Programs\DeepSeek Harnessresources\app-update.yml:provider generic,channel nightly)c59d10aff167ad7eefead4b3a9082fb57c8fbfe8;Electron 44.7.0 / Node 24.21.0)a6b1b85f44891ee1484bed6a9fc08acaae777d90)deepseek-harness-0.2.2-rc.2-win-x64.exe,299,659,528 B;SHA-512(base64)5rRAkVruKkm4KELAbTqV8ZFrMwSo3oESnzXb9ebkJWPCMe6WuHORQZR63uY+BqAc6sBdyBtwSelsCGh0k1NcJA==(与update-info.json一致),SHA-2567E25286518CE520B5C0943E178C52CDBA1CC9EC3680BC7DA181B79879E080C32,Authenticode Validapp.asar49FD1B087190D594B15C44FE6394C6FFD591200ABA76E209B5769498F83076AE现象与证据
应用内点击“重启并更新”,连续 7 次失败(本地时间 Asia/Shanghai:14:04:19、14:05:39、14:06:38、14:09:49、14:19:07、14:22:28、14:23:04)。每次失败在
%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer-logs\directory-failure-*.log留下日志,7 份内容完全一致(仅 GUID/时间不同):
失败后应用被重新拉起(观察到 14:23:04 失败后,14:23:12 有新进程启动),所以从用户视角就是“每次点更新都失败、永远停在 rc.1”,且 UI 没有任何可读原因。
事件查看器“应用程序”日志在 14:08:52 另有一条
Application Hang(来源 Application Hang,事件 ID 1002,DeepSeek Harness.exe文件版本 0.2.0.1,WER 类型 AppHangB1),说明更新退出交接期间应用进程曾卡死,会放大这个竞争条件。对照实验(三个)
实验 1:应用完全退出后手动运行同一个安装包 → 一次成功
注册表
DisplayVersion从0.2.2-rc.1变为0.2.2-rc.2(安装目录 14:36:14 更新,14:36:24 新版进程启动),且没有产生新的directory-failure日志。说明安装包、下载、签名、权限、磁盘都正常,问题只在“应用内更新”这条路径。实验 2:Windows 规则复现——进程 cwd 在目标目录内时改名必然 error 32
实验 3:rc.2 应用侧未修复验证
装好 rc.2 后检查其
resources/app.asar:lib/main.js全文没有process.chdir;electron-updater仍是 6.8.9,BaseUpdater.spawnLog的 spawn 参数仍为{ stdio, env, detached: true }(不设置cwd)。NsisUpdater.doInstall走这条路 → 安装器继续继承应用进程的 cwd。也就是说 rc.2 没有针对本问题的应用侧修复,下次自动更新仍有很高概率原样复现。根因分析(两处叠加,均在产品侧)
1)应用侧:安装器继承了“安装目录”作为工作目录,且交接有竞态
BaseUpdater.quitAndInstall:先install()(spawn 安装器),随后setImmediate(() => app.quit());安装器在应用退出之前就已经开始运行。BaseUpdater.spawnLog的 spawn 参数是{ stdio, env, detached: true },没有设置 cwd,安装器继承应用进程的 cwd。...\Programs\DeepSeek Harness);rc.1 / rc.2 的lib/main.js均无process.chdir。MoveFileExW必然返回ERROR_SHARING_VIOLATION(32);即使应用完全退出,只要安装器 cwd 仍在安装目录内,改名仍然失败(与 #12988 的 PEB 实测结论一致)。app.quit()并发,应用进程/句柄尚未释放,构成第二种占用。2)安装器侧:备份失败后的重试策略无法恢复
.old-{GUID}”步骤失败后只做 10 次快速重试,不等待应用退出,也不修正自身 cwd,然后Abort回滚;重试对该错误无效(7/7 复现)。installer-logs里没有占用进程/cwd 信息,应用侧也无从自动化恢复(与 #12974 的 11.25s 重试窗口分析一致)。复现步骤(开发自测)
%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer-logs\生成directory-failure-*.log,内容同上;版本停留在 rc.1。预期:升级成功到 rc.2。实际:安装器备份旧目录失败并回滚,7/7 复现。
建议修复
quitAndInstall()之前把进程 cwd 移出安装目录(如process.chdir(app.getPath("userData"))),或改用带cwd的 helper 启动安装器(cwd: app.getPath("temp"))。directory-failure日志中记录安装器自身 cwd、占用进程的 PID/映像名(Restart Manager),并把该失败分类上报到更新日志/UI。临时规避(已验证)
完全退出 DSH(托盘退出,并确认任务管理器里没有
DeepSeek Harness.exe残留),然后在资源管理器中进入%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\pending,双击deepseek-harness-0.2.2-rc.2-win-x64.exe覆盖安装。此时安装器 cwd 是
pending目录而非安装目录,备份改名可以成功。All reactions