dsh-reveal-fix:修复 DSH Windows 平台文件管理器静默失效问题

在 DSH 的使用场景中,点击交付卡片上的「在文件资源管理器中显示」是一个常见操作。但在 Windows 平台上,该功能存在一个静默失效的 bug:接口返回 HTTP 204,界面提示“已请求在文件资源管理器中显示”,但屏幕上没有任何窗口弹出。既没有任务栏闪烁,也没有报错信息,用户感知为零。

插件定位

dsh-reveal-fix 是一个客户端用户插件,由 HeJian2002W 开发。它修复了 DSH 在 Windows 上“在文件资源管理器中显示”功能静默失效的问题。该插件以用户插件形式实现,因此不会受到 DSH 核心升级的影响。

核心功能

该插件通过替换 sessionController 上的 revealPath 方法,解决了两个叠加的上游缺陷:

  1. 修复路径编码问题:将 pathToFileURL().href(百分号编码的 URL)替换为纯 Windows 路径(单个 argv 元素,紧贴逗号),使 Explorer 能够正确解析路径并定位到目标目录,而非静默回退到桌面。
  2. 修复窗口隐藏问题:将 windowsHide: true 修改为 false,防止 Node 将其转为 STARTUPINFO 的 wShowWindow = SW_HIDE,从而让 Explorer 窗口真正可见。

插件保留了非 Windows 平台的回退逻辑,并维持了上游约定:即使 Explorer 退出码为 1,也不视为失败。

安装与启用

从 GitHub 安装(推荐):

dsh plugin --profile web add github:HeJian2002W/dsh-reveal-fix

从本地目录安装(离线或自改代码时):

dsh plugin --profile web add link:C:\Users\Admin\.dsh\local-plugins\dsh-reveal-fix

卸载:

dsh plugin --profile web remove dsh-reveal-fix

安装后需重启 dsh 生效。

典型用法

安装插件后,点击交付卡片上的「在文件资源管理器中显示」,Explorer 窗口将正常打开并定位到对应文件目录,且窗口可见。

注意事项

  • 焦点抢占:修复两个缺陷后,浏览器仍会在约 1.7 秒后把前台焦点抢回(即使服务端调用 Win32 SetForegroundWindow 强制置顶,同样在 1.7s 内被覆盖),窗口容易被压在浏览器后面。这是已知残留问题,插件默认不启用额外延迟逻辑,以避免干扰用户操作。
  • 依赖文件:插件依赖 cordis.patch.yml 文件。
  • 升级兼容性:由于插件位于 ~/.dsh/local-plugins/,升级 DSH 不会影响插件源码,无需重新打补丁。但若上游改变 sessionController.revealPath 的名字或语义,需同步更新插件。

结语

dsh-reveal-fix 是一个针对 Windows 平台特定 bug 的精确修复方案。通过用户插件的形式,它在不修改核心文件的前提下解决了路径解析和窗口显示的静默失败问题。若遇到“已请求在文件资源管理器中显示”但无窗口出现的情况,建议优先尝试本插件。

插件目录页
GitHub 仓库

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜