EFL
(雲 くもちゃん Ultra)
1
前言
前段时间,Cherry Studio 仓库中有人提 issue 问能否添加到 scoop(Windows 平台的一款优秀的软件包管理器
),于是我在 scoop 官方的 Extras 库中提交了一个 PR,但是:
- maintainer 审阅后迟迟没有动静
- 被另一个 maintainer 注意到了,遂合并
- 我为其编写的软件包逻辑被修改:原本的逻辑是在 AppData/Roaming 目录下生成 CherryStudio 硬链接
指向 scoop 的持久化存储目录,这样 Cherry Studio 产生的用户数据都能被持久化存储;但 maintainer 将其修改为,卸载时将 AppData/Roaming/CherryStudio 拷贝到持久化目录,安装时再 copy 回去。这相当于只是在软件更新的时候防止数据被覆盖。
很显然,按照这个逻辑,如果我想要换设备、重装系统,scoop 是无法恢复 Cherry Studio 的数据的,这并不符合我对 scoop 的期望。我希望 scoop 安装的软件具有良好的便携性,至少能做到的就做到,所以我并不理解 maintainer 做出这个修改的意义是什么。(甚至,他还把我写的建议关闭 Cherry Studio 自动更新以防冲突的提示,和卸载时删除残留文件的代码全删了
)
但是我还是要说一下,这位 maintainer 其实人很好
,后面我提交 PR 添加 Cherry Studio 预览版时他很快合并,还去 Cherry Studio issue 区评论了
考虑到 scoop 仓库的 contribution 周期极长,哪怕请求 code review 都不会有什么人理你,我就单开了 jam 这个仓库。
随着 scoop 安装的软件越来越多,我也发现很多仓库的软件清单并不完善,仅仅只是让 scoop 代替你安装软件,并没有实现持久化、合理的数据清理等关键功能。我想在这种环境下,scoop 除了能“用命令行安装软件”和“统一管理软件版本”,就没有什么别的意义了——实话说,直接按传统方式,用安装包安装软件,用 Geek Uninstaller 卸载,还不会像 scoop 卸载一样留下一堆残留文件。这是不应该的。
jam 是什么
jam 是一个专注于可靠性和整洁性的 scoop 仓库,其中所有软件清单都经过仔细检查,确保卸载时也不会留下残留数据
、可以实现良好的便携性——这意味着,对于 jam 中的所有软件:
- 当用户重装系统、更换设备时,只需要复制 scoop 目录到新系统,执行
scoop reset *
就可以直接恢复安装了的软件及其数据
- 软件数据集中,比如你的 scoop 目录在 D 盘,那么所有软件及其数据也会存储在 D 盘,而且存储在 scoop 目录下
- 保持系统干净整洁

通过 jam 安装 Cherry Studio
首先你需要有 scoop,这篇文章不是为非 scoop 用户编写的。
scoop bucket add jam https://github.com/EFLKumo/jam
scoop install jam/cherry-studio
这样就完成了
。后续可以通过 scoop 管理 Cherry Studio 的更新,并且它的数据实际上是存储在你的 YOUR_SCOOP_DIR/persist/cherry-studio
中的,方便管理。
如果有帮助到你,请给仓库点一个 star~ 
29 Likes
leeorz
(近战法师)
2
这意思是撇开了cherry自身的安装机制,全部使用scoop管理?
我日常scoop,倒是没用过jam
3 Likes
leeorz
(近战法师)
4
那软件源为什么能够规范软件的行为?让它变成便携呢?
1 Like
EFL
(雲 くもちゃん Ultra)
5
具体原理是:
- 下载 Cherry Studio 的安装包但不运行,直接解压缩提取其中的程序
- 在 CS 存储数据的地方创建硬链接指向 scoop 的持久化目录,这样 CS 以为自己在写入原本的数据目录,实际上数据都存在后者那里
- 换到新系统的时候,直接复制 scoop 目录,数据都在那里,执行
scoop reset *
就会重建硬链接等(这是 scoop 本身的功能)实现便携
jam 里面后续还会加入别的我平时用的软件,比如有位大佬的 readest ,也是用这个方法处理的
3 Likes
感谢大佬分享,感觉会是个很有潜力的软件仓库,不过我现在用 homebrew 了
1 Like
meethuhu
(红色塑料袋)
9
感谢分享,之前就想用 scoop 管理 Cherry Studio 只是没找到包含的仓库
1 Like
leeorz
(近战法师)
10
是否可以理解为 jam 中的包,都被维护者维护了这么一套机制,变成了可便携的版本?
Sycamore
(Sycamore)
13
可惜我现在才看到
我为了解决这个问题把整个用户目录直接符号链接到了D盘
1 Like
EFL
(雲 くもちゃん Ultra)
14
是个人物。。不过我记得的确有一个项目就是安装系统后,将用户目录转移到其他盘
但我觉得这种操作意义不大,因为更改数据存储目录的根本原因并不是通过 D 盘分配空间,而更在于将应用数据与系统数据分离,这样系统崩了不会影响到应用数据
Sycamore
(Sycamore)
15
不是转移, 是符号链接SymbolicLink
, 切换到超管用户, 利用robocopy
把我的用户目录全复制到D盘下一个目录, robocopy
会自动处理AppData
里的连接点,.
这样真正的数据在D盘, 重装也没有问题, 只要重建符号链接就行, 然后Scoop reset *
恢复一下.
缺点就是全局安装的解决不了, 比如有些没法用scoop安装的, 或者scoop全局按装的.
还有一个就是如果微软更新系统时候改了AppData
里的一些符号链接或者连接点估计会有问题. (虽然不大可能改
)
2 Likes
ofo
(ofo)
18
scoop 安装了,但备份有问题[info] [BackupManager] backup progress { stage: ‘preparing’, progress: 0, total: 100 }
[info] [BackupManager] backup progress { stage: ‘writing_data’, progress: 20, total: 100 }
[error] [BackupManager] Backup failed: Error: ENOENT: no such file or directory, scandir ‘D:\Scoop\apps\cherry-studio\1.2.10\data\Data’