星期四, 九月 29, 2022

153 使用 yaP 制作 Clash for Windows 便携版, 配置随着打包即可带走

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没有太大意义.