在 DSH 的使用場景中,點擊交付卡片上的「在文件資源管理器中顯示」是一個常見操作。但在 Windows 平臺上,該功能存在一個靜默失效的 bug:接口返回 HTTP 204,界面提示“已請求在文件資源管理器中顯示”,但屏幕上沒有任何窗口彈出。既沒有任務欄閃爍,也沒有報錯信息,用戶感知爲零。
插件定位¶
dsh-reveal-fix 是一個客戶端用戶插件,由 HeJian2002W 開發。它修復了 DSH 在 Windows 上“在文件資源管理器中顯示”功能靜默失效的問題。該插件以用戶插件形式實現,因此不會受到 DSH 核心升級的影響。
核心功能¶
該插件通過替換 sessionController 上的 revealPath 方法,解決了兩個疊加的上游缺陷:
- 修復路徑編碼問題:將
pathToFileURL().href(百分號編碼的 URL)替換爲純 Windows 路徑(單個 argv 元素,緊貼逗號),使 Explorer 能夠正確解析路徑並定位到目標目錄,而非靜默回退到桌面。 - 修復窗口隱藏問題:將
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 的精確修復方案。通過用戶插件的形式,它在不修改核心文件的前提下解決了路徑解析和窗口顯示的靜默失敗問題。若遇到“已請求在文件資源管理器中顯示”但無窗口出現的情況,建議優先嚐試本插件。