tryhi 发表于 2024-5-9 15:43:34

[原创][手把手教]免服务器做自动更新教程【QQ收藏】

本帖最后由 tryhi 于 2024-5-10 15:19 编辑

想让自己做的程序可以自动更新,但是又没有服务器该怎么做,只要把你的最新程序放到所有人都能访问的地方就可以了,这里讲如何利用QQ收藏来做这个,用很久以前的图种技术,就是把一个VLX文件合并在图片后面伪装成一张图片。
1、准备一张图片,越小越好(记下图片总共多少字节)
2、将你的程序先做好,并打包成vlx
3、将图片跟vlx放到同个目录下,假设图片名字为a.jpg,程序名字为a.vlx并新建一个txt,输入copy /b a.jpg+a.vlx b.jpg 保存后将txt改为bat,如图所示


4、双击bat文件后会得到b.jpg,这张jpg看起来跟a.jpg一摸
一样,但是其尾部其实隐藏了a.vlx的数据
5、打开QQ收藏

6、点击新建笔记、插入图片,选择特殊处理过的图片,然后加上一行文字
vlx-version(20240509)
括号内数字作为最新版本号


用来做版本判断是否要更新

7、右键转发给任意一个联系人


8、从你的联系人里面打开转发的链接,你会得到这个地址,复制下来
https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275
这个地址将填到你的程序里面



到这里基本工作已经完成了,接下来测试一下代码
(setq wy(try-get-url "https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275"));这里填写你收藏的地址
(setq 获取版本号(try-StrRegExp wy "vlx-version\\([^)]+"))
(setq 版本号(substr (car 获取版本号) 13))
(setq 下载地址(car(try-StrRegExp wy "http://shp.qpic\\.cn/collector[^\")]+")))
(try-DownLoad 下载地址 "c:\\b.jpg");下载图片
(setq a(try-file-ReadBinary10 "c:\\b.jpg"));读取图片
(try-file-WriteBinary10 "c:\\a.vlx" (try-lst-move-head a 16194 ));剥离图片,这里的16194是原始图片的大小(字节数)

这段代码跑一下,看看C盘有没有出现一个a.vlx文件,有的话表示搭建正常
注:有基础的人看到这里应该知道接下来怎么做了,因为核心就是如何解决下载问题



9、下载“自动更新示例.lsp”,把这两个变量改为你对应的收藏地址跟图片大小


10、编译为VXL,把syz-vlx-path.fas放到最前面,自动更新示例.lsp放到第二进行编译(注:关于syz-vlx-path.fas请看baitang36的帖子[经验] 【原创】精确获取vlx的加载位置)

11、新编译的VLX跟原始图片合并在一起(详见第1步),然后更新图片
完成,你的VLX就可以通过QQ收藏来控制更新了
;;定义当前的版本号,为了节约代码,使用日期作为版本,能力强的同学可以用标准版本号格式
(setq *banben* 20240508)

(setq
*收藏地址* "https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275" ;注意,这个地址必须是你自己的收藏地址,本文仅做示例
*原始图片大小* 16194 ;这里的16194是原始图片的大小(字节数)
)

(if SYZ-VLX-PATH ;这里使用baitang36的获取vlx路径的fas
(progn
    (setq *vlx路径*(vl-catch-all-apply 'SYZ-VLX-PATH nil))
    (if (vl-catch-all-error-p *vlx路径* )
      (setq *vlx路径*nil)
    )
)
)


(defun 获取远程下载链接及版本号 (/ wy 版本号 获取版本号 获取下载地址 下载地址)
(setq wy(try-get-url *收藏地址*);这里填写你收藏的地址
    获取版本号(try-StrRegExp wy "vlx-version\\([^)]+")
    版本号(substr (car 获取版本号) 13)
    获取下载地址(try-StrRegExp wy "vlx-download\\([^)]+");注意,这里必须按照格式来,粘贴的地址必须是纯文本
    下载地址(substr (car 获取下载地址) 14))
(list (atoi 版本号)下载地址)
)



(setq 版本-地址(vl-catch-all-apply '获取远程下载链接及版本号));拦截错误,避免无网络等原因导致阻塞

(if (vl-catch-all-error-p 版本-地址 )
(princ"\n获取远程版本失败")
(if (< *banben* (car 版本-地址));当前版本小于远程版本,需要更新
    (progn
      (setq 临时文件(vl-filename-mktemp "b.jpg") )
      (try-DownLoad (cadr 版本-地址) 临时文件);下载图片
      (setq a(try-file-ReadBinary10 临时文件));读取图片
      (vl-file-delete 临时文件)
      (setq 临时文件vlx(vl-filename-mktemp "a.vlx") )
      (try-file-WriteBinary10 临时文件vlx (try-lst-move-head a *原始图片大小* ));剥离图片,这里的16194是原始图片的大小(字节数)
      (if *vlx路径*
      (progn
          (vl-file-delete *vlx路径*);删除自身
          (vl-file-rename 临时文件vlx *vlx路径*);移动并重命名至指定目录
          (princ "\n自动更新完成")
      )
      (alert"当前版本过旧,无法获取自身路径,请手动更新")
      )
    )
    (princ "\n当前版本为最新版")
)
)

;主程序开始……

引用一下5楼的总结
总结一下就是:
1.准备原始图片a
2.将vlx文件打包进图片,附在图片数据后部,生成图片b
3.找图床,并标记版本
4.网络访问,判断版本,下载b
5.剔除图片a的数据,得到vlx
6.判断版本,如果当前版本没有远程版本新,则删除自身,把新版本覆盖过来




你有种再说一遍 发表于 2024-5-10 04:16:20

本帖最后由 你有种再说一遍 于 2024-5-10 04:26 编辑

图片容易被重渲染,所以复制到尾巴其实很容易被抓出来.
最好的方法是藏到霍夫曼树里面...嘻嘻
https://www.zhihu.com/question/607058738

Klein 发表于 2024-5-9 17:03:30

总结一下就是:
1.准备原始图片a
2.将vlx文件打包进图片,附在图片数据后部,生成图片b
3.找图床,并标记版本
4.网络访问,判断版本,下载b
5.剔除图片a的数据,得到vlx

思路确实赞!

south 发表于 2024-6-4 20:37:23

本帖最后由 south 于 2024-6-4 20:41 编辑


(setq wy (try-get-url "https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275"));这里填写你收藏的地址
(setq 获取版本号 (try-StrRegExp wy "vlx-version\\([^)]+"))
(setq 版本号 (substr (car 获取版本号) 13))
(setq 下载地址 (car (try-StrRegExp wy "http://shp.qpic\\.cn/collector[^\")]+")))
(try-DownLoad 下载地址 "c:\\b.jpg");下载图片
(setq a (try-file-ReadBinary10 "c:\\b.jpg"));读取图片
(try-file-WriteBinary10 "c:\\a.vlx" (try-lst-move-head a 16194));剥离图片,这里的16194是原始图片的大小(字节数)


这个代码测试会出现这个了,是咋回事呢,是不是收藏夹实现不了下载了
换成自己打包的文件也是不行,请大佬指教
; 错误: ActiveX 服务器返回错误:
非选择性的参数。

伊江痕 发表于 2024-5-9 15:55:51

学到了啊,大海哥

htlaser 发表于 2024-5-9 16:58:34

每天来学习一点!

言戲無軍 发表于 2024-5-9 17:03:24

弄个exe文件会不会被杀毒软件杀掉

tryhi 发表于 2024-5-9 17:48:09

言戲無軍 发表于 2024-5-9 17:03
弄个exe文件会不会被杀毒软件杀掉

首先,关exe什么事?
其次,杀不杀看exe,不看你加的数据

cds15980954301 发表于 2024-5-9 18:14:03

厉害!拜服学习到了,谢谢大神分享这么优秀的程序

unclearriver 发表于 2024-5-9 18:26:14

牛啊:lol:lol

guosheyang 发表于 2024-5-9 19:25:17

感谢大佬分享教程!

jia_jg 发表于 2024-5-9 19:41:42

学习到了,太厉害了,大佬
页: [1] 2 3 4 5 6 7 8
查看完整版本: [原创][手把手教]免服务器做自动更新教程【QQ收藏】