Repository navigation
Replies: 3 comments
|
同样复现:Win11,0.2.1-rc.3 → rc.5,默认安装目录( |
|
这是来自QQ邮箱的假期自动回复邮件。您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
|
补一个 3/3 稳定复现的案例,根因和主楼不完全一样:即使 DSH 进程树完全退出( 1. 安装器继承了 DSH 的工作目录(主因)
const params = { stdio, env, detached: true };
const p = spawn(cmd, args, params); // 没有 cwd
Windows 不允许重命名「任何进程的当前目录」, 2. 其它常驻进程持有安装目录句柄(次因)
只关掉这两个句柄(不杀进程), 我们实际用的绕过(已成功升到 0.2.1-rc.5)
建议
补充:主楼提到的「backend.stop() 没等子进程退出」我们也查了——本机在安装前确认过没有 DSH 进程残留,所以至少在这个案例里不是主因;两类原因可以同时存在。 |
Uh oh!
There was an error while loading. Please reload this page.
Summary
DSH Desktop 自动升级在“重命名旧安装目录 → 解压新版本”这一步稳定失败:安装器
MoveFileExW返回Windows error 32(另一个程序正在使用此文件),重试 10 次后放弃,App 回退到旧版本继续运行,
且没有给出可操作的提示(用户只会看到升级没生效)。当前安装版本与 feed 均为
0.2.1-rc.5。Reproduction
D:\deepseekDSH),正常使用一段时间(有 Web 会话 / MCP 子进程在跑)。Current behavior
安装器日志(
%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\installer-logs\):升级包本身是完好的:pending 目录里的
deepseek-harness-0.2.1-rc.5-win-x64.exe(289,408,544 B)与 feed 的 sha512 一致。Expected behavior
并提供一次性重试或下次启动自动补装。
Environment
D:\deepseekDSH(非 C 盘)https://download.deepseek.com/dsh-desk/feeds/win-x64/,channelnightly%LOCALAPPDATA%\@deepseek-aidsh-desktop-updater\根因分析(基于 0.2.1-rc.3 的
lib/main.js)升级流程(
DesktopUpdateCoordinator):beforeRestart():host.updateTasks("lock")→platformView.closeAndWait()→backend.stop();shellInstallerOwnsQuit = true,quitAndInstall(true, true);before-quit里只要shellInstallerOwnsQuit为 true 就直接return(不preventDefault),App 退出;问题:
backend.stop()只是发起停止,没有等待 host 及其子进程(MCP server 等)真正退出。NSIS 在旧进程仍持有
D:\deepseekDSH内文件句柄(或进程 CWD 落在该目录)时,MoveFileExW重命名目录必然返回 error 32;10 次重试都发生在同一窗口内,因此全部失败。建议修复
backend.stop()后等待进程树真正退出(轮询 host PID + 子进程,带超时),确认后再 quit 并拉起安装器;超时则中止升级并提示用户,而不是让安装器去撞。
app.on('quit')且确认进程树为空之后(will-quit仍太早)。方便用户自助解决。
D:\deepseekDSH\<version>,启动时切换),从根上避免重命名运行中目录。All reactions