dsh-icon-changer:爲 DeepSeek Harness 桌面端更換應用圖標

前言

DeepSeek Harness(DSH)桌面端在任務欄、快捷方式裏顯示的是安裝目錄裏 exe 內嵌的圖標。想換成自己的 .ico、或偶爾換回官方默認,通常要手動找 PE 資源編輯工具、自己備份 exe,還要處理 Windows 對運行中可執行文件的鎖定,以及改完後 shell 仍顯示舊位圖的問題。下面介紹社區插件 dsh-icon-changer(維護者 flycucu,分類「趣味換裝」):在 DSH 設置頁裏選圖標、上傳、應用與回退,由插件在應用退出後完成改寫與緩存刷新。

這是什麼

dsh-icon-changer 是 DSH 的應用圖標更換器插件:把官方 DeepSeek Harness.exe 內嵌圖標換成你選的 .ico,也支持一鍵從首次更換前留下的備份還原官方默認。倉庫說明標註「本插件代碼由 DeepSeek Harness 生成」;當前 package 版本爲 0.3.1,許可證 MIT,面向 Windows 桌面端(Node >=18)。

插件拆成兩半,且不引入任何 npm 依賴:

  • 宿主半區(lib/index.js,跑在 DSH 主進程)通過 ctx.webServer 掛載 HTTP API;
  • 客戶端半區(lib/client.js)在設置頁註冊卡片,無需手輸管理 URL。

社區目錄頁:flycucu/dsh-icon-changer
源碼與文檔:GitHub

爲什麼必須「退出後再換」

Windows 會鎖住正在運行的可執行文件,而插件運行在要改的那個 exe 進程裏。因此 API 不會當場改文件,而是:

  1. 校驗請求,把任務寫入 state.json 與 pending-job.json;
  2. 用 WMI(Win32_Process.Create)拉起 worker——直接 spawn 的子進程會隨應用 job object 一起結束,WMI 創建的進程掛在 wmiprvse.exe 名下,應用退出後仍可繼續;
  3. worker(bin/apply-icon.ps1)輪詢等待 exe 釋放;
  4. 備份 → 用 rcedit(tools/rcedit-x64.exe,2.0.0)改寫圖標 → 比對改前/改後/目標三者的圖標指紋;
  5. 指紋未變且不等於目標則自動還原並報失敗;成功則(可選)重新拉起應用;
  6. 刷新 shell 圖標緩存:worker 先跑 ie4uinit.exe -show,應用重啓後宿主側再調 bin/refresh-shell.ps1 做完整刷新(含停 Explorer、刪除 iconcache_* 等)。

更換圖標會伴隨一次應用重啓,這是平臺限制。只改 exe 不刷緩存時,資源已是新圖標但桌面仍可能顯示舊圖;文檔說明僅重啓 Explorer 不夠,必須刪圖標緩存庫。

核心功能

設置頁(推薦)

打開 設置 → 應用圖標:

  • 選圖標:內置 assets/whalemaid.ico(界面文案「鯨魚娘(預置)」)、assets/original.ico(「原版」)與已上傳圖標並列,點選即可;
  • 上傳 .ico:宿主校驗合法 ICONDIR 頭,非 ico 會拒(not-an-ico);上傳上限 4 MiB。可配 <名字>-tray.ico 伴生文件放在 $DSH_HOME/icon-changer/icons/,托盤優先使用;
  • 應用選中圖標並重啓:排隊後應用退出,worker 改寫,再自動拉起;
  • 回退官方圖標:從首次更換前創建的備份還原;
  • 刪除:僅未使用的外部上傳圖標顯示刪除;內置/原版與使用中的圖標不可刪(builtin-readonly / in-use)。

卡片頂部常駐「當前圖標」,默認對齊 state.applied.icon 對應的圖標 id;目標 exe 路徑、排隊任務、上次結果一併展示。更換過程中可能彈出 PowerShell 窗口顯示進度,不要手動關閉該窗口(關閉等於終止任務);長時間等待類任務會用 -WindowStyle Hidden 靜默運行。

獨立頁面(備用)

Web GUI 同端口下訪問:

http://127.0.0.1:<端口>/icon-changer

按鈕與設置卡片對應,UI 異常時可走此路徑。

HTTP API(本機)

方法 路徑 說明
GET /api/icon-changer/status exe / 備份 / 當前圖標 / 待處理任務 / 上次結果
GET /api/icon-changer/icons 內置與已上傳列表
GET /api/icon-changer/log?lines=200 helper.log 尾部
GET /api/icon-changer/preview/<id> 圖標預覽字節
POST /api/icon-changer/upload {name, b64}
POST /api/icon-changer/apply {icon, restart, targets}
POST /api/icon-changer/restore {restart, targets}
DELETE /api/icon-changer/icon/<id> 刪除上傳圖標
POST /api/icon-changer/clear 清除卡住的排隊任務

圖標 id 形如 builtin:whalemaid.ico 或 user:my_icon.ico。寫操作做同源校驗(Origin 與 Host 不一致返回 403)。路由監聽 127.0.0.1,文檔說明不帶 Web GUI token,同機同用戶進程可調用 /apply。

安裝與啓用

倉庫未提供一鍵安裝腳本,步驟爲「代碼到本地 + 掛進 desktop profile」。README 給出的取代碼方式如下(改 package.json 前請先備份,它屬於啓動關鍵配置):

git clone https://github.com/flycucu/dsh-icon-changer.git "$env:USERPROFILE\.dsh\plugin-src\dsh-icon-changer"

然後建立兩處鏈接:

  1. 把插件目錄掛進 profile:
mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-icon-changer" "<插件目錄>"
  1. 在 %USERPROFILE%\.dsh\profiles\desktop\package.json 增加依賴 "dsh-icon-changer": "link:<插件目錄>",並把 dsh-icon-changer 寫入 dsh.profile.bundles(宿主靠 bundle 進 Loader,客戶端靠 roster 掃描)。

改完 package.json 後必須重啓 DeepSeek Harness;客戶端卡片只在啓動掃描時註冊,不重啓不會出現「應用圖標」入口。

卸載:從 dsh.profile.bundles 與依賴中移除,再刪除 junction。

語法檢查(在插件目錄):

npm run check

數據目錄與手工回滾

路徑 內容
$DSH_HOME/icon-changer/state.json 任務與結果
$DSH_HOME/icon-changer/icons/ 上傳的圖標
$DSH_HOME/icon-changer/backup/DeepSeek Harness.exe.orig 首次更換前創建的原始 exe 備份(只創建一次)
$DSH_HOME/icon-changer/helper.log 宿主 / WMI 啓動器 / worker 統一日誌
$DSH_HOME/icon-changer/pending-job.json worker 任務描述

排查建議先看 $DSH_HOME/icon-changer/helper.log(宿主 [host]、啓動器 [wmi-spawn]、worker 時間戳)。插件不可用時可用備份整文件還原:

Copy-Item "$env:USERPROFILE\.dsh\icon-changer\backup\DeepSeek Harness.exe.orig" `
          "<你的安裝目錄>\DeepSeek Harness.exe" -Force

適用場景與注意

適合:在 Windows 上使用 DSH 桌面端、希望任務欄/快捷方式圖標個性化,且接受「應用重啓 + 可能短暫彈出 worker 窗口」的流程;趣味換裝類需求(例如預置「鯨魚娘」圖標)。

務必知曉:

  • 插件以當前 DSH 進程權限運行,會改寫本機安裝目錄下的 exe;安裝前應閱讀源碼與 MIT 許可證,自行判斷是否信任維護者與倉庫內容。
  • 改寫 exe 會破壞該文件的代碼簽名(若原先有簽名),SmartScreen 等可能提示;備份在首次更換前寫入,多次換圖標不會把備份覆蓋成中間態。
  • API 信任模型爲「同用戶、同機器」:本機進程可調用 /apply,跨源網頁被同源策略擋住,但不能防本機惡意程序。
  • 任務卡住時可點「取消排隊」或再次應用(新請求覆蓋舊隊列);宿主會在 worker 異常退出後嘗試接續 stalled 任務。文檔對 QuickEdit 導致控制台進程暫停、以及 Explorer 圖標緩存等坑有專門說明,遇問題時對照 helper.log。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-icon-changer 把「備份 exe → rcedit 換圖標 → 校驗指紋 → 刷 shell 緩存 → 可選重啓」收成設置頁裏幾條操作,並處理 Windows 文件鎖與 WMI worker 生命週期。若你需要給桌面端換圖標又不想手搓 PE 工具鏈,可按 README 掛進 desktop profile 後從 設置 → 應用圖標 使用。

  • 目錄頁:https://www.skillhub.cn/plugins/flycucu/dsh-icon-changer
  • GitHub:https://github.com/flycucu/dsh-icon-changer
羽毛球分组比赛记分
小程序二维码

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

小夜