把 DeepSeek Harness 打包成类似 Codex 的 Windows 桌面应用:Electron、一键启动、插件管理和动态壁纸

最近我尝试把 DeepSeek Harness 做成一个类似 Codex 的 Windows 桌面程序。

最终实现的功能包括:

一键启动 DeepSeek Harness
独立的 Electron 桌面窗口
开机自动启动
桌面快捷方式
插件管理界面
Wallpaper Engine 动态壁纸
程序、插件、缓存和会话尽量存放在 D 盘
不再需要每次手动打开浏览器地址

本文记录完整的实现思路、目录结构、打包方法,以及过程中遇到的 pnpm、Electron 和动态壁纸问题。

一、这个桌面版本质上是什么

这套桌面版使用 Electron 实现。

DeepSeek Harness 本身仍然负责模型、会话、智能体和插件运行。Electron 只是给它增加一个真正的 Windows 桌面窗口。

整体工作流程如下:

桌面快捷方式启动 VBS 脚本。

VBS 脚本设置 DeepSeek Harness 的数据目录、pnpm 仓库和本地服务端口。

DeepSeek Harness CLI 启动本地 Web 服务。

Electron 创建桌面窗口,并加载:

http://127.0.0.1:50182

Electron preload 再通过 window.desktopWindow 提供动态壁纸、本地文件访问和窗口控制等桌面能力。

所以,它不是把大模型直接打进 EXE,而是把本地运行的 DeepSeek Harness Web 界面包装成一个桌面应用。

二、最终的目录结构

为了避免插件和缓存全部跑到 C 盘,我把主要数据统一放在:

        D:\deepseek

目录规划如下:

        D:\deepseek\app

用于存放解压后的 Electron 桌面程序。

        D:\deepseek\dsh-home

用于存放 DeepSeek Harness 的配置、插件、技能、会话和存储数据。

        D:\deepseek\dsh-home\profiles\web-desktop

这是桌面版专用的 profile。桌面版安装的插件及其 node_modules 主要位于这里。

        D:\deepseek\eac-data\agent

用于存放已经安装的 DeepSeek Harness CLI 运行环境。

        D:\deepseek\pnpm-store

用于存放 pnpm 下载的依赖包。

        D:\deepseek\wallpaper-desktop-data

用于存放 Electron 的用户数据、Local Storage 和缓存。

通过这种方式,可以避免 DeepSeek Harness 的主要数据散落在 C 盘。

需要注意的是,Electron 和 Windows 仍可能读取少量系统用户信息,但插件、会话、pnpm 包和 Electron 用户数据都可以通过启动参数放到 D 盘。

三、便携版如何使用

下载 Windows x64 便携包后,需要完整解压。

建议解压到:

D:\deepseek\app

不要只复制里面的 EXE 文件。

Electron 除了 EXE,还依赖 resources、locales、DLL、PAK 等文件。只复制 EXE 会导致程序无法启动。

解压后,双击:

DeepSeek Harness桌面版-一键启动.vbs

启动脚本会自动设置:

DSH_HOME=D:\deepseek\dsh-home

npm_config_store_dir=D:\deepseek\pnpm-store

Electron 用户数据目录:

D:\deepseek\wallpaper-desktop-data

本地服务地址:

http://127.0.0.1:50182

桌面版使用的 profile:

web-desktop

如果电脑上已经安装过 DeepSeek Harness EAC,启动器会优先复用现有的 Node.js 和 DSH CLI。

如果没有找到现有运行环境,Electron 桌面壳会尝试查找系统中的全局 dsh 命令。

因此,公开发布的压缩包只是 Electron 桌面壳,不应该包含作者自己的 API Key、会话数据或账号配置。

四、创建桌面快捷方式和开机自启

便携包中还包含:

安装桌面快捷方式和开机自启.vbs

双击后,它会创建:

桌面快捷方式
当前 Windows 用户的开机启动快捷方式

如果以后不需要开机自启,可以运行:

关闭开机自启.vbs

这个脚本只会删除启动目录中的快捷方式,不会删除桌面图标,也不会删除 D:\deepseek 中的数据。

五、为什么使用 VBS,而不是直接双击 EXE

直接双击 Electron EXE 时,无法保证它使用正确的数据目录和 DeepSeek Harness profile。

VBS 启动器可以在启动前统一设置环境变量,例如:

DSH_HOME

DSH_DESKTOP_URL

DSH_DESKTOP_PROFILE

DSH_DESKTOP_NODE

DSH_DESKTOP_WEB_ENTRY

npm_config_store_dir

NO_PROXY

同时,它还可以给 Electron 添加:

--user-data-dir="D:\deepseek\wallpaper-desktop-data"

这样可以保证每次都使用同一套 D 盘数据。

如果直接使用 Windows 应用 ID 启动旧版 EAC,可能会产生另一个使用 C 盘数据的实例。最后就会出现两个界面、两套插件和两套配置。

因此,最好始终通过同一个 VBS 启动器进入桌面版。

六、代理如何设置

如果访问 GitHub 或下载 Electron、npm 插件时需要代理,可以在 VBS 中增加:

env("HTTP_PROXY") = "http://127.0.0.1:7897"

env("HTTPS_PROXY") = "http://127.0.0.1:7897"

env("NO_PROXY") = "127.0.0.1,localhost"

其中 7897 是我本机 VPN 的 HTTP 代理端口,需要根据自己的代理软件修改。

如果不需要代理,只保留:

NO_PROXY=127.0.0.1,localhost

NO_PROXY 很重要,否则本地的 DeepSeek Harness 服务也可能被发送到代理服务器,导致 Electron 无法加载本地界面。

公开发布便携包时,不建议写死作者自己的代理地址。

七、pnpm Unexpected store location 是什么问题

安装插件时,我遇到过下面的错误:

ERR_PNPM_UNEXPECTED_STORE

错误信息表示当前 node_modules 原来链接到了:

C:\Users\用户名\AppData\Local\pnpm\store\v11

但现在 pnpm 又希望使用:

D:\deepseek\pnpm-store\v11

原因是同一份 node_modules 先使用了 C 盘 pnpm store,后来又切换到了 D 盘。

pnpm 不允许一套 node_modules 同时混用两个 store。

解决方法是先固定 store:

pnpm config set store-dir D:\deepseek\pnpm-store --global

然后进入对应 profile:

cd D:\deepseek\dsh-home\profiles\web-desktop

重新安装:

pnpm install

不要直接从另一个 profile 复制 node_modules,因为其中可能包含指向旧 pnpm store 的链接。

八、插件安装到哪里

桌面版使用独立的 profile:

web-desktop

所以桌面版插件一般安装在:

D:\deepseek\dsh-home\profiles\web-desktop\node_modules

这样可以把普通 Web 版插件和桌面专用插件分开。

如果插件安装成功但界面中没有出现,可以检查以下内容:

插件是否安装到了 web-desktop profile。

package.json、pnpm-lock.yaml 和 node_modules 是否一致。

pnpm store 是否仍然指向 D 盘。

是否彻底结束旧的 Electron 和 EAC 进程。

插件要求的是 window.desktopWindow,还是其他不兼容的桌面桥接 API。

有些插件虽然能在普通 Web 界面中运行,但桌面功能依赖 Electron preload。如果桌面壳没有提供插件需要的 API,插件就会提示“仅桌面版支持”。

九、Electron 打包方法

桌面壳使用:

Electron 37.10.3

@electron/packager

在项目目录执行:

cd D:\deepseek\wallpaper-desktop\desktop

pnpm run build

pnpm run package:win

打包输出目录为:

D:\deepseek\wallpaper-desktop\desktop\release\DeepSeek Harness桌面版-win32-x64

打包后会得到完整的 Windows x64 Electron 程序目录。

十、Compress-Archive 打包失败

部分精简版 Windows 缺少 PowerShell 的 Compress-Archive 模块。

原打包脚本通过 Compress-Archive 创建 Electron ZIP 缓存,因此会直接失败。

我将其改成使用 Windows 自带的 tar.exe:

tar.exe -a -c -f electron.zip .

tar.exe 的 -a 参数会根据扩展名自动选择 ZIP 格式。

这样即使系统没有 Compress-Archive,也能继续完成 Electron 打包。

十一、为什么完整程序有 300 多 MB

Electron 包含 Chromium、Node.js、V8、国际化资源、媒体组件和图形库,因此体积较大。

完整解压目录约为 300 MB。

压缩成 ZIP 后约为 128 MB。

这是正常现象。

如果只追求更小体积,可以考虑 WebView2 或 Tauri。但对于现有的 React Web UI、preload IPC、视频播放和插件系统,Electron 的兼容性更直接。

十二、双击后只有托盘图标,没有窗口

这种情况通常不是程序完全没有启动,而是以下问题之一:

旧的 Electron 或 EAC 实例仍在运行。

窗口被其他软件的覆盖层遮挡。

旧实例使用了不同的 user-data-dir。

DeepSeek Harness 本地服务没有成功启动。

Electron 加载的端口与 DSH 实际端口不一致。

可以先在任务管理器中结束旧的 Electron 和 Deepseek Harness EAC 进程,然后只通过统一的一键启动 VBS 重新进入。

不要同时使用旧 EAC 快捷方式和新的 Electron 桌面壳。

十三、为什么没有弹出网页地址

桌面版不会额外弹出浏览器页面。

Electron 已经直接在自己的窗口中加载:

http://127.0.0.1:50182

如果只运行 dsh web,终端一般会输出网页地址。

使用 Electron 桌面壳时,这个地址直接显示在应用窗口中,所以不需要再打开浏览器。

十四、插件下载出现 404

如果插件依赖指向 GitHub Releases 中的固定 tgz 文件,而作者没有发布对应附件,就会出现 404。

例如依赖地址指向:

releases/latest/download/插件名-0.1.0.tgz

但 GitHub Release 中不存在这个文件,pnpm 就无法下载。

解决方法包括:

使用插件仓库的正确 GitHub 地址。

从源码本地执行 npm pack 或 pnpm pack。

把生成的 tgz 保存到本地目录。

在 profile 的 package.json 中使用 file: 本地路径。

需要注意,404 下载失败和 pnpm store 位置冲突是两类不同问题。

十五、开源项目和许可证

桌面壳参考或基于:

TianYa-DAO/dsh-wallpaper-engine

该项目使用 MIT License。

DeepSeek Harness、Electron、Chromium 和其他依赖应分别遵守各自许可证。

Electron 打包目录中的 Chromium 第三方许可证文件也应保留。

在博客或发布页面中,建议注明:

本文中的 DeepSeek Harness、Electron、Wallpaper Engine 等名称及商标归各自权利人所有。项目仅用于个人学习和技术交流。

十六、最终效果

完成后,使用方式就和普通 Windows 桌面软件差不多:

双击桌面图标。

DeepSeek Harness 本地服务自动启动。

Electron 窗口自动显示。

插件管理器可以直接使用。

插件、会话和主要缓存保存在 D 盘。

开机后可以自动运行。

Wallpaper Engine 动态壁纸可以显示在应用内部,也可以同步到 Windows 桌面。

整个方案分为三层:

DeepSeek Harness 负责模型、智能体、会话和插件。

Electron 负责桌面窗口和 Windows 系统能力。

VBS 负责数据目录、环境变量、一键启动和开机自启。

这种方式既保留了 DeepSeek Harness 的插件生态,又获得了类似 Codex 的 Windows 桌面使用体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值