cfw这个东西真的是一言难尽, 你说它好用吧, 它是electron写的, 性能又差, 占用内存; 和.NET程序一起, 在我的鄙视链中.. 你说它不好用吧, 它又很强大... cfw本身带有便携版, 但是 %appdata%\clash_win\ 会有缓存文件.
yap是什么? 它是一个可扩展的便携软件制作工具.
原理很简单, yap没有hook路径之类的, 通过自己写ini, 实现启动前的环境准备(比如设置环境变量, 准备文件, 写入注册表等等), 再等到指定进程退出以后, 再继续环境处理(比如回收配置文件到某个目录下, 删注册表, 清理文件文件夹等等), 虽然2019年期就停更了, 但是扩展性很好. 就是个小小启动器, 还支持参数用指定密码加密, yap就相当于两个cmd.
portableapps见过吧, yap和那个类似, portableapps还需调用NSIS, 虽然说很高级, 但我的需求就是简单地写个cfw的便携版ini, 不需要那么繁琐的准备环境和各种依赖.
yap和pa的文件结构类似, 就一个启动器exe和一个ini文件. 所以最重要的也就是这个ini的内容了. 下面我把我自己写的ini贴出来.
把cfw放入app文件夹, 以保证 \App\Clash for Windows.exe 存在. 后续更新只需要自己清掉app文件夹里的文件, 放入新版本即可.
如果clash需要重启, 手动退出clash重新进. 由于yap自身缺陷, 只能识别标题是否存在, 无法做到检测进程.exe是否重启. 如果clash已经重启了, 没事, 手工退出再重新进一下就好.
; configuration file for yaP v0.7.x (http://rolandtoth.hu/yaP/)
; application name: Clash for Windows
; website: https://github.com/Fndroid/clash_for_windows_pkg/releases
[GENERAL]
application = {YAPROOT}\App\Clash for Windows.exe
; commandline =
workdir = {YAPROOT}\App\
!waitprocess = Clash for Windows
[BEFORE]
dir = %userprofile%\.config\clash\ :: {YAPROOT}\Data\
dir = %appdata%\clash_win\ :: {YAPROOT}\Data\cache\
[AFTER]
-dir = {YAPROOT}\Data\logs\
-file = %temp%\*.tmp.ico
-file = {YAPROOT}\App\debug.log
-regkey = HKCU\SOFTWARE\Classes\clash\
其中;是注释, 其它内容很好理解, 就是在每次cfw结束之后回收配置文件至 软件目录\Data\下, 清理缓存.
网站也对语法有详细的文档介绍. https://yap.rolandtoth.hu/#configuration 还有各类模板可供参考: https://yap.rolandtoth.hu/#examples
下载地址: https://yap.rolandtoth.hu/
软件启动前和退出后, 有文件读写操作, 所以如果是像 钉钉 那样的屎山, 用这个yap没有太大意义.