前言¶
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 不会当场改文件,而是:
- 校验请求,把任务写入
state.json与pending-job.json; - 用 WMI(
Win32_Process.Create)拉起 worker——直接spawn的子进程会随应用 job object 一起结束,WMI 创建的进程挂在wmiprvse.exe名下,应用退出后仍可继续; - worker(
bin/apply-icon.ps1)轮询等待 exe 释放; - 备份 → 用 rcedit(
tools/rcedit-x64.exe,2.0.0)改写图标 → 比对改前/改后/目标三者的图标指纹; - 指纹未变且不等于目标则自动还原并报失败;成功则(可选)重新拉起应用;
- 刷新 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"
然后建立两处链接:
- 把插件目录挂进 profile:
mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-icon-changer" "<插件目录>"
- 在
%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