🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

托盘重启项 IHS470/dsh-desktop-tray-restart

DeepSeek Harness
IHS47029 天前有提交已提供中文文档扫描:高危

给桌面托盘菜单加一键重启应用入口

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/IHS470/dsh-desktop-tray-restart.git
按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · dev
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-desktop-tray-restart(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:21:50

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接
查看扫描证据(共 7 处,展示前 6 条)
  • 执行外部命令固定命令
    patch-shell-tray.mjs:67
    const out = execSync(
  • 执行外部命令运行时拼接
    patch-shell-tray.mjs:101
    const tasklist = () => execSync(`tasklist /FI "IMAGENAME eq ${IMAGE}" /NH`, { encoding: 'utf8' })
  • 执行外部命令运行时拼接
    patch-shell-tray.mjs:112
    execSync(`taskkill /F /IM "${IMAGE}"`, { stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    patch-shell-tray.mjs:120
    const child = spawn(appExe(), [], { detached: true, stdio: 'ignore', env, cwd: INSTALL })
  • 执行外部命令运行时拼接
    patch-shell-tray.mjs:127
    const out = execSync(
  • 执行外部命令来自配置/变量
    patch-shell-tray.mjs:354
    execSync(command, { stdio: 'ignore' })
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 托盘菜单加重启入口
  • 本地可撤销补丁

给桌面 shell 托盘菜单加上「重启 DeepSeek Harness」项——本地可撤销补丁,因为插件够不到托盘。

README

由 DeepSeek 最新模型翻译生成
dsh-desktop-tray-restart 给 DeepSeek Harness 桌面壳的托盘右键菜单加一项 「重启 DeepSeek Harness」(英文界面为 "Restart DeepSeek Harness")。 为什么必须改壳,插件做不到 托盘在桌面壳的主进程里(new Tray / setContextMenu)。插件只有两个落脚点——宿主机(纯 Node,没有 Electron API)和页面渲染进程(preload 只暴露固定的 dshDesktop:browser、deviceInfo、shortcuts、updates、closeWindow)——都无法向托盘菜单添加任何一项。所以这是一个壳侧改动,本工具把它在已安装的 resources/app.asar 里本地、可回退地做掉。 补丁内容(lib/main.js 两处): - 托盘菜单里、在「退出 DeepSeek Harness」上面插入一项 「重启 DeepSeek Harness」(与「打开 DeepSeek Harness」同一命名模式,跟随语言切换); - 它调用壳自己的代码 app.relaunch() + quitWithoutConfirmation()(壳在应用菜单里用的就是这段),因此托盘图标由 Electron 自己移除,不会像"杀掉进程"那样留下幽灵图标。
展开完整文档(README 剩余 1 节)
dsh-desktop-tray-restart

给 DeepSeek Harness 桌面壳的托盘右键菜单加一项 「重启 DeepSeek Harness」(英文界面为 "Restart DeepSeek Harness")。

为什么必须改壳,插件做不到

托盘在桌面壳的主进程里(new Tray / setContextMenu)。插件只有两个落脚点——宿主机(纯 Node,没有 Electron API)和页面渲染进程(preload 只暴露固定的 dshDesktop:browser、deviceInfo、shortcuts、updates、closeWindow)——都无法向托盘菜单添加任何一项。所以这是一个壳侧改动,本工具把它在已安装的 resources/app.asar 里本地、可回退地做掉。

补丁内容(lib/main.js 两处):

- 托盘菜单里、在「退出 DeepSeek Harness」上面插入一项 「重启 DeepSeek Harness」(与「打开 DeepSeek Harness」同一命名模式,跟随语言切换);
- 它调用壳自己的代码 app.relaunch() + quitWithoutConfirmation()(壳在应用菜单里用的就是这段),因此托盘图标由 Electron 自己移除,不会像"杀掉进程"那样留下幽灵图标。

用法

node patch-shell-tray.mjs status # 已安装的 asar 是否带这块补丁
node patch-shell-tray.mjs build # 从原始备份生成暂存包,并逐文件校验(零差异 + main.js 的 SHA256 重算)
node patch-shell-tray.mjs detach # 45 秒后由 WMI 创建的独立进程完成切换(推荐)
node patch-shell-tray.mjs swap # 立即切换(会先关闭应用)
node patch-shell-tray.mjs revert # 还原原始 asar 并重启

可选参数:--install=<目录>、--asar=<文件>、--log=<文件>、--delay=<毫秒>。不传参数时会自动探测安装位置:先看运行中的进程路径,再回退到 %LOCALAPPDATA%\Programs\DeepSeek Harness。

日志默认写到 %USERPROFILE%\.dsh\dsh-tray-restart\patch.log。

安全设计(每一处都为了"改坏了也能回来")

- 从原始备份重建:如果 app.asar.orig 存在就用它做基底,避免在已打过补丁的包上再插一次(那会插入第二项)。
- 逐文件校验:重新读回新包,与原始包逐个文件比对字节,并重算被改动文件的 SHA256;任何一处不符就中止,不会切换。
- 切换前备份 + 自动回退:原文件备份为 app.asar.orig;若新包起不来,切换进程会在 40 秒内还原原文件并重启应用。
- detach 而不是 swap:Windows 上应用会把它的后代放进作业对象,直接在应用内部启动的切换进程会随应用一起被杀(实测:它死在"关闭应用"这一步,一个文件都没来得及碰)。用 WMI 创建的进程归 WMI 提供程序宿主所有,应用杀不到它。

如实说明

- 这是对厂商打包应用的本地补丁,不是官方功能;应用更新或重装会覆盖 app.asar,届时重跑 build + detach 即可。
- 长期解法是让壳自己带上这一项:见 docs/dsh-restart-api-request.zh.md(精确到文件与行号的补丁,以及插件侧退出/重启 API 的请求)。
- 只在 Windows 上验证过——托盘本来就是 Windows 分支(if (process.platform === "win32")),macOS 走的是应用菜单。

给桌面壳的托盘菜单加一项 "Restart DeepSeek Harness",做法是给已安装的 resources/app.asar 里的 lib/main.js 打补丁——本地操作,可回退。托盘在壳的主进程里,插件够不到它(宿主机没有 Electron API;页面只拿到固定的 dshDesktop preload 接口),所以这必须是壳侧改动。这一项调用壳自己的 app.relaunch() + quitWithoutConfirmation(),因此 Electron 会自己移除托盘图标,而不是留下幽灵图标。

命令:status、build(暂存包 + 逐文件校验)、detach(推荐:由 WMI 创建的进程完成切换,因为应用退出时会杀掉它的后代进程)、swap、revert。参数:--install=<dir>、--asar=<file>、--log=<file>、--delay=<ms>。

如实说明:这是给厂商打包应用打补丁;应用更新或重装会覆盖 app.asar,补丁得重新打。原文件备份为 app.asar.orig,打过补丁的包启动失败的项会在 40 秒内自动恢复。长期方案是让 shell 承载该项——见 docs/dsh-restart-api-request.md。仅限 Windows。
预览分享卡片长什么样 ↓IHS470/dsh-desktop-tray-restart
分享 · DeepSeek Harness Hub
IHS470/dsh-desktop-tray-restart

给桌面托盘菜单加一键重启应用入口

回到顶部