吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16411|回复: 147
上一主题 下一主题
收起左侧

[原创工具] 【原创软件开发者的福音】【8-29更新】无需服务器,基于蓝奏云的软件更新工具

    [复制链接]
跳转到指定楼层
楼主
善良的果仁 发表于 2023-8-28 13:23 回帖奖励
本帖最后由 善良的果仁 于 2023-11-8 13:50 编辑


工具主要功能说明:
可以让软件每次打开时,自动检测是否有更新,此功能无需软件作者具备服务器。

使用说明及实现原理:
1、蓝奏云网盘设置:网盘中要设置一个带密码的文件夹(假设为:HotUpdate)用于存放软件更新数据及更新说明(更新数据、更新说明文件不要设置密码);



2、设置更新说明:更新说明为txt文件,里面内容为新版本更新的主要内容,txt文件名需要设置为大写    V. + 最新版本号 + . dll  (例如:V.1.0.1.dll ),上传到 HotUpdate文件夹




3、设置更新数据:更新数据用压缩为zip格式,更新数据文件名需要设置为大写  U. +最新版本号+.zip(例如:U.1.0.1.zip ),上传到 HotUpdate文件夹




4、初始化设置:(1)设置网址为 HotUpdate文件夹分享地址【必填】,例如:https://guoren.lanzouo.com/b00wvmvli
                           (2)密码为HotUpdate文件夹分享密码【必填】,例如:0000
                           (3)软件现行版本号为未更新的软件版本号【必填】,例如:1.0.0
                           (4)更新软件logo:用于设置更新程序左上角logo【选填】例如:/小白点/xbd.png
                           (5)软件启动程序路径:要启动的程序填写相对本软件路径【必填】,例如:/小白点/小白点A股助手.exe









6、原理:获取HotUpdate所有文件名称,取第一个以 V. 开头  .dll  结尾的文件并取中间的版本号(V.1.0.1.dll  取1.0.1),获取软件现行版本号(1.0.0),两个版本号不一样,检查是否存在U.1.0.1.zip ,如果存在则获取更新内容,让用户选择是否更新。
2023/8/29 11:20 更新
    V1.0.1
     aardio重构,去除python代码,体积变小   17.8M   ——>  789 k


软件链接:https://guoren.lanzouy.com/b00xj009c  密码:52pj


说下实现的思路,大家用的编程语言不一样,源码没有参考价值(我这边用的是aardio+python实现的)。


这个东西本质就是蓝奏云直链解析
本次用    https://guoren.lanzouy.com/b00wvmvli密码:0000     为例进行讲解,采用手机网页版访问(稳定),因此请求头设置手机浏览器请求头:Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/5197 MMWEBSDK/20221109 MMWEBID/5104 MicroMessenger/8.0.31.2281(0x28001F39) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android

1、get请求:https://guoren.lanzouy.com/b00wvmvli  得到内容有这一段:
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript">
        var imzcbj ='HotUpdate';
        document.title = imzcbj;
document.getElementById('sp_name').innerHTML=imzcbj;        var pwd;
        var pgs;
        var ib2o7x = '1693209538';
        var _h109q = 'a6fb8e273dd47b11b3fc800a2fcba9b3';
        pgs =1;
        function file(){
                var pwd = document.getElementById('pwd').value;
        $('#sub').val("提交中..."); 
                $.ajax({
                        type : 'post',
                        url : '/filemoreajax.php',
                        data : { 
                        'lx':2,
                        'fid':7417478,
                        'uid':'1162887',
                        'pg':pgs,
                        'rep':'0',
                        't':ib2o7x,
                        'k':_h109q,
                        'up':1,
                                                'ls':1,
                        'pwd':pwd                        },
                        dataType : 'json',



然后截取一下字符串,整理一下得到下次post请求的data,把data带入第二次请求
post 请求  https://guoren.lanzouy.com/filemoreajax.php
[JavaScript] 纯文本查看 复制代码
data = {lx: 2,
fid: 7417478,
uid: 1162887,
pg: 1,
rep: 0,
t: 1693209538,
k: a6fb8e273dd47b11b3fc800a2fcba9b3,
up: 1,
ls: 1,
pwd: 0000}

得到:
[JavaScript] 纯文本查看 复制代码
{"zt":1,"info":"sucess","text":[{"icon":"dll","t":0,"id":"ibVKf16ft28h","name_all":"V.1.0.1.dll","size":"81.0 B","time":"\u524d\u592922:01","duan":"i16ft28","p_ico":0},{"icon":"zip","t":0,"id":"ieQ8U16ft27g","name_all":"U.1.0.1.zip","size":"39.4 M","time":"\u524d\u592922:01","duan":"i16ft27","p_ico":0}]}

把文件的id进行拼接  得到下次请求url ,(例如,"id":"ibVKf16ft28h")拼接文件详情链接(手机版)---> https://guoren.lanzouo.com/   +   tp/    +    ibVKf16ft28h
第三次请求,get    请求   https://guoren.lanzouo.com/tp/ibVKf16ft28h
得到网页中有
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript">var cppat = 'as'; 
var tedomain ='c';
var vkjxld = 'https://developer-oss.lanzouk.com/file/';
var tedomaina = ''; 
var hyggid = '?UjRXaQ08VGUIAQU9BDFRPVZpBz8DKldkBy5XYVQmUWEGKAEyDj9UbFEhCjpRbFM+AzxQCldhBGIDOVptBWgBMFJlVzENZVQ2CGYFagR2UTZWfwc/A2RXZAcmVyFUeFFtBjQBZg5hVDNRKApsUTFTfQNoUGZXJwQxAzxaPQVgATZSMFdmDWZUMgg8BWMEZlE2VjkHZwNsVzEHMFdjVDpRYgZgAWYOMlQ1UWQKPVE0UzQDOFA3VzEEKANgWjAFNQEmUidXcw01VHIINwU3BG1RYVY9BzQDbldtBzhXZlQuUSQGbwE7DjZUZlE6Cm1RM1NrA2tQbFc9BDUDNVppBWsBJlI0V2wNJ1Q9CG8FZQRoUWJWPAc3A2hXZwcwV2ZULlElBnYBIQ5uVDFRMQpkUTRTYQNuUGVXOAQyAzJaegUsAWlSIlc9DWFUOAhuBX0EYVFgVjUHLANtV2EHMFd/VDtRYAYgATIOP1Q9UTc='; 
var domianload = 'c'; 
//var subtis = 'sa'; 
(function(document) { 
var submit = document.getElementById('submit'); 
submit.onfocus = submit.onmousedown = function() { 
submit.href =  vkjxld + hyggid
}


取  vkjxld + hyggid  得到下次请求url    ,这里可以进行判断(vkjxld 、 hyggid 这两个变量名有可能会变),用 = 分割为列表listone ,遍历listone ,listone前几个字符串为“https 且同时存在   lanzou   那 listone 切割  ‘ 得到 https://developer-oss.lanzouk.com/file/  ,  listone[i-1]切割 var   得到变量名称(注意去除空格),hyggid 变量名及他的值同理亦可得。

第四次请求,这次比较特殊, vkjxld + hyggid得到的链接实际上是重定向的,要用head方法进行请求,解析取Location的值就是文件直链

剩下的事情就简单了,按照   6、原理就可以实现本软件功能。




7、探讨
之前有朋友提出强制更新问题,但是前段时间一直比较忙,今天闲下来主要探讨一下强制更新的思路。
假设我现在提供更新检测和更新服务的软件为A,需要更新的软件为B,目前软件运行模式是这样的:先运行A检测软件是否需要更新,然后通过软件A启动软件B,抛开A,用户是可以直接启动B的,一样可以运行,这种情况下无法对原软件进行约束强迫其进行更新。
因此我设想通过时间戳加密来规避这个问题,先运行A联网检测然后产生时间戳C,A对时间戳C加密得到密文D保存在本地,A运行完成后启动B,B需要做下面的事情:在启动主程序前获取当前时间戳E并检测获取本地密文D,如果获取到D,则解密D得到时间戳C,判断E-C是否大于5分钟,大于则自动关闭。实际上要做的是把时间戳解密方式给到软件开发者,用于比较两个软件启动时间差。时间差太大,说明没有启动更新程序,那么中止软件功能运行,这样变相实现强制更新。


免费评分

参与人数 49吾爱币 +60 热心值 +44 收起 理由
QQDCY + 1 + 1 鼓励转贴优秀软件安全工具和文档!
liyonglan + 1 我很赞同!
wudi1860 + 1 + 1 我很赞同!
hackerxj + 1 运行程序A检测是否需要更新,启动更新程序B销毁A更新完,启动A销毁更新程序.
npc6699 + 1 + 1 用心讨论,共获提升!
lyhjh + 1 + 1 我很赞同!
fkeuaii + 1 + 1 我很赞同!
ALDShD + 1 + 1 太厉害了···
jason76wong + 1 + 1 我很赞同!
MeetCode + 1 + 1 谢谢@Thanks!
ialove + 2 + 1 谢谢@Thanks!
taotaofox + 1 + 1 我很赞同!
liping8764 + 1 + 1 我很赞同!
lztym + 1 + 1 谢谢@Thanks!
cc58c58 + 1 + 1 热心回复!
username171 + 1 + 1 热心回复!
北冥鱼 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
windy8848 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sas + 1 + 1 我很赞同!
pbgz + 1 + 1 谢谢@Thanks!
感悟 + 1 + 1 谢谢@Thanks!
a14520 + 1 + 1 谢谢@Thanks!
jianghw + 1 + 1 我很赞同!
Mr丶Yang + 2 + 1 热心回复!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CuresW + 1 热心回复!
colinxia + 1 + 1 我很赞同!还是希望分享下源码,我就是用aardio+python。
Coqgaulois + 1 谢谢@Thanks!
windong + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
www152321 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
splic2012 + 1 + 1 热心回复!
似水流年2015 + 2 + 1 热心回复!
catoo1 + 1 谢谢@Thanks!
BonnieRan + 1 + 1 谢谢@Thanks!
y_w_o + 1 + 1 谢谢@Thanks!
ma4907758 + 1 谢谢@Thanks!
Kristine_He + 1 + 1 鼓励转贴优秀软件安全工具和文档!
一场荒唐半生梦 + 1 + 1 热心回复!
Marken888 + 1 + 1 用心讨论,共获提升!
vethenc + 2 + 1 谢谢@Thanks!你这么叼家里人知道吗!
riyaolaowang + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ziyunyi + 1 我很赞同!
洋葱Pie + 1 谢谢@Thanks!
czz404 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
愚无尽 + 2 + 1 我很赞同!
FarSight2333 + 1 + 1 热心回复!
S1280P + 1 谢谢@Thanks!
wszjf + 4 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 #
 楼主| 善良的果仁 发表于 2023-9-1 09:59 |楼主
february 发表于 2023-8-30 09:18
感谢分享,能否分享下aardio的源码

main.aardio
[JavaScript] 纯文本查看 复制代码
import win.ui;
import inet.http;
import inet.httpFile;
import web.rest.client;
import web.json;
import fsys.ini
import thread.event;
import process;
import win.ui.simpleWindow;
import thread.command;

var UpdatePackageUrl = '';
var UpdateDescriptionUrl = '';
var filename = ''; 
var  wjnum = 0;  
var $ini = fsys.ini("/updata.ini")
var version = $ini.read("version","num");
var mainpath = $ini.read("set","mainpath"); 
var url = $ini.read("lanzouyun","url");
var pwd = $ini.read("lanzouyun","pwd");
var logopath = $ini.read("set","logopath");
if(version==null or mainpath==null or url==null or pwd==null ){
	if( ! win.loadForm("\dlg\ck.aardio").doModal() ){
		return;
	}	
}
/*DSG{{*/
mainForm = win.form(text="更新";right=499;bottom=339;border="none")
mainForm.add(
bk={cls="bk";left=-5;top=0;right=505;bottom=29;dl=1;dr=1;dt=1;z=2};
button={cls="button";text="更新";left=20;top=267;right=140;bottom=302;db=1;dr=1;z=1};
button2={cls="button";text="取消";left=362;top=267;right=482;bottom=302;db=1;dr=1;z=3};
button3={cls="button";text="暂不更新";left=188;top=268;right=308;bottom=303;db=1;dr=1;z=8};
edit={cls="edit";left=20;top=58;right=482;bottom=215;autohscroll=false;edge=1;font=LOGFONT(h=-18);multiline=1;readonly=1;vscroll=1;z=5};
plus={cls="plus";left=0;top=0;right=24;bottom=24;z=7};
progress={cls="progress";left=20;top=229;right=482;bottom=247;color=65280;edge=1;max=100;min=0;z=6};
static={cls="static";left=13;top=33;right=276;bottom=50;notify=1;transparent=1;z=4}
)
/*}}*/

mainForm.onMouseDown  = function(wParam,lParam){
	mainForm.hitCaption()	
}

win.ui.simpleWindow(mainForm);

var $ini = fsys.ini("/updata.ini")
var version = $ini.read("version","num");
var mainpath = $ini.read("set","mainpath"); 
var url = $ini.read("lanzouyun","url");
var pwd = $ini.read("lanzouyun","pwd");
var logopath = $ini.read("set","logopath");
mainForm.plus.background = logopath;
var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];//ybmzlqzj.lanzoue.com
var Origin =  "https://"+Host
var listener = thread.command();
mainForm.edit.print("获取更新中...")
listener.getgxnr = function(data1,data2,data3,data4){
	wjnum = data1;
	UpdatePackageUrl = data2;
	UpdateDescriptionUrl = data3;
	filename = data4;if(wjnum ==1 ){
		/*
var pyMain = py3.import("pyMain");
		var pyStr = pyMain.fetch_direct_link(UpdateDescriptionUrl);
*/
		var http = web.rest.client("Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36");
		var data = http.get(UpdateDescriptionUrl);
		mainForm.edit.text=data
		mainForm.button.disabled = false;
	}elseif(wjnum == 2){
		mainForm.edit.text="暂未上传更新包!"
		var http = web.rest.client("Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36");
		var data = http.get(UpdateDescriptionUrl);
		mainForm.edit.print(data)
		mainForm.button.disabled = true;
	}
	else {
		mainForm.button.disabled = true;
    	mainForm.close()
		var prcs = process(mainpath);
	}

}	
	
	

mainForm.button.disabled = true;
mainForm.show();
//多线程
thread.invoke( 
	function(mainForm){
	import win.ui;
	import inet.http;
	import inet.httpFile;
	import web.rest.client;
	import web.json;
	import fsys.ini
	import thread.command;
	var $ini = fsys.ini("/updata.ini")
	var version = $ini.read("version","num");
	var filename = "";
	var wjnum = 0; 
	var UpdatePackageUrl = ""
	var UpdateDescriptionUrl = ""
	var mainpath = $ini.read("set","mainpath"); 
	var url = $ini.read("lanzouyun","url");
	var pwd = $ini.read("lanzouyun","pwd");
	var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];//ybmzlqzj.lanzoue.com
	var Origin =  "https://"+Host
	function IntoPageDir(url) { 
		var http = web.rest.client();
		var data = http.get(url);
		var t,k,s,uid,fid;
		try{
			t = string.split(string.split(string.split(tostring(data),"<var pgs;>")[2],"<= '>")[2],"<';>")[1];
			k = string.split(string.split(string.split(tostring(data),"<var pgs;>")[2],"<= '>")[3],"<';>")[1];
			fid = tonumber(string.split(string.split(tostring(data),"<'fid':>")[2],"<,>")[1]);
			uid = string.split(string.split(tostring(data),"<'uid':'>")[2],"<',>")[1];
			s =  {"error":0,"t":t,"k":k,"fid":fid,"uid":uid};
			}
		catch(e){
			s = {"error":1,"t":"0","k":"0","fid":0,"uid":0};
			$ini.write("error",tostring(e),"error");
			}
		http.close();
		return s;
	};

	function IntoPage2(url,pwd,data1) { 
		var t = data1.t;  
		var k = data1.k; 
		var fid = data1.fid; 
		var uid = data1.uid; 
		var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];
		var Origin =  "https://"+Host;  
		var url2 = Origin +"/filemoreajax.php"; 
		var http = web.rest.client();
		var data = http.post(url2,{
			'lx'=tonumber(2);
			'fid'= fid;
			'uid'= uid;
			'pg'= tonumber(1);
			'rep'= '0';
			't'= t;
			'k'= k;
			'up'= tonumber(1);
			'ls'=tonumber(1);
			'pwd'=pwd;
		});
		var responsedata = web.json.parse(data).text;
		http.close();
		return responsedata;
	};
	//解析下载地址
	
	
	
	
	function IntoPage3(url,data){
		var list = data;
		var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];
		var Origin =  "https://"+Host;
		var url2 =  Origin+"/tp/"+data.id;
		var http = web.rest.client("Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36");
		var data = http.get(url2);
		var wjnum =0; 
		data = string.split(tostring(data),'<javascript">')[2]
		data = string.split(tostring(data),'<var>')
		var urlsplit1 ;
		var urlsplit2; 
		for(i=1;#data;1){
			if(string.indexOf(data[i],"lanzou") != null){
				urlsplit1 = data[i]	
				urlsplit1 = string.split(tostring(urlsplit1),"<'>")[2]
			}elseif(string.indexOf(data[i]," = '?")!= null){
				urlsplit2 = string.split(tostring(data[i]),"<'>")[2]
			}
		}
		newurl = urlsplit1 + urlsplit2	
		return newurl
	};

		IP_ADDRESSES = {
    	"218", "218", "66", "66", "218", "218", "60", "60", "202", "204", "66", "66", "66", "59", "61", "60", "222", "221", "66", "59",
    	"60", "60", "66", "218", "218", "62", "63", "64", "66", "66", "122", "211"
	}
	URL_DOMAINS = {
    	"wwa.lanzoux.com",
    	"wwa.lanzoup.com",
    	"wwa.lanzouw.com",
    	"wwa.lanzouy.com"
	}
	function get_random_ip(){
		var ip1 = IP_ADDRESSES[math.random(1,#IP_ADDRESSES)];
		var ip2 = tostring(math.random(60, 255));
		var ip3 = tostring(math.random(60, 255));
		var ip4 = tostring(math.random(60, 255));
		return ip1+'.'+ip2+'.'+ip3+'.'+ip4
	};
	var random_ip = get_random_ip(); 
	var referer_url = URL_DOMAINS[math.random(1,#URL_DOMAINS)]; 


	try{
		var Page1 = IntoPageDir(url); 
		var Page2 = IntoPage2(url,pwd,Page1);//得到  {"icon":"dll","t":0,"id":"iReFr0svzqsj","name_all":"v1.0.1.dll","size":"81.0 B","time":"2023-04-13","duan":"i0svzqs","p_ico":0},{"icon":"zip","t":0,"id":"iXT3a0slnxkb","name_all":"\u5c0f\u767d\u70b9.zip","size":"39.4 M","time":"2023-04-10","duan":"i0slnxk","p_ico":0}]
		var updatatext = {}; //Page2中  name_all 包含  V. 的数据分别排在第几位 例如{1,3}表示第1、3个文件都包含V. 最新文件就是updatatext[1]
		//Page2中  name_all 包含  V. 的数据分别排在第几位
		for(i=1;#Page2;1){
			if(string.indexOf(Page2[i].name_all,"V.") != null){
		 		table.push(updatatext,i)
			}
		}
		//var jsj = IntoPage3(url,Page2[1]); 
		//mainForm.edit.print(jsj)
		//判断存在是否包含 V.的文件
		if(#updatatext != 0){
			var newvupdata = Page2[updatatext[1]].name_all//文件名  V.1.0.1.dll
			var bbh =string.replace(newvupdata,'V.','')//得到  1.0.1.dll
			var hzm = '.'+string.split(newvupdata,'.')[#string.split(newvupdata,'.')]// 得到后缀名 dll
			bbh =string.replace(bbh,hzm,'')//得到  1.0.1
			//检查 最新版本号与data.ini的version[num]是否相同,如果不相同
			if(bbh!=version){
				for(i=1;#Page2;1){
					//检查Page2中是否存在 U.+getversion 字符串的文件名,如果存在,返回文件id
					if(string.indexOf(Page2[i].name_all,"U."+bbh) != null){   //判断是否存在文件名包含 U.1.0.1  的文件
		 				wjnum = 1
		 				//updataid = Page2[i].id;//U.1.0.1.zip 的id
		 				//upversionid = Page2[updatatext[1]].id;//V.1.0.1.dll 的id
		 				var resques3 = IntoPage3(url,Page2[updatatext[1]]);
		 				var http = inet.http();
		 				UpdateDescriptionUrl = http.location(resques3,'GET',,
		 					{'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36',
    						'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    						'Accept-Encoding': 'deflate, sdch, br',
    						'Accept-Language': 'zh-CN,zh;q=0.8',
    						'Cache-Control': 'max-age=0',
    						'Connection': 'keep-alive',
    						'Upgrade-Insecure-Requests': '1',
    						'X-Forwarded-For': random_ip,
    						'Referer': referer_url}
    					);//更新说明文件直链
    					
    					var resques3 = IntoPage3(url,Page2[i]);
		 				var http = inet.http();
		 				UpdatePackageUrl = http.location(resques3,'GET',,
		 					{'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36',
    						'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    						'Accept-Encoding': 'deflate, sdch, br',
    						'Accept-Language': 'zh-CN,zh;q=0.8',
    						'Cache-Control': 'max-age=0',
    						'Connection': 'keep-alive',
    						'Upgrade-Insecure-Requests': '1',
    						'X-Forwarded-For': random_ip,
    						'Referer': referer_url}
    					);//更新压缩包直链
    					
    					
					filename = Page2[i].name_all;
					}
				}
				if(wjnum!=1){
					wjnum=2
				}	
			}
		}
		thread.command.getgxnr(wjnum,UpdatePackageUrl,UpdateDescriptionUrl,filename)
	}
	catch(e){
		mainForm.edit.print("更新异常")
		mainForm.button.disabled = true;
	}
},mainForm)

mainForm.button.oncommand = function(id,event){
	thread.invoke( 
	function(mainForm,filename,UpdatePackageUrl){
		import win.ui;
		import inet.http;
		import inet.httpFile;
		import web.rest.client;
		import web.json;
		import fsys.ini
		import process;
		import thread.command;
		var $ini = fsys.ini("/updata.ini")
		var mainpath = $ini.read("set","mainpath"); 
		var url = $ini.read("lanzouyun","url");
		mainForm.button.disabled = true;
		mainForm.progress.setRange(0,100)
		var onReceiveFileSize = 0
		var remoteFile = inet.httpFile(UpdatePackageUrl ,"/")
		var ok,err,errCode = remoteFile.test()
		if( ok ){
			mainForm.edit.print("文件已下载完成、服务器未更新,无需重新下载"); 
		}
		elseif( ok === null ){
			mainForm.edit.print("下载错误,HTTP错误代码",remoteFile.statusCode,err);
		}
		remoteFile.onReceiveBegin = function(statusCode,contentLength,fileSize){
			if( statusCode == 206/*断点续传*/ ){
				mainForm.edit.print("正在断点续传") 
				mainForm.progress.pos=(fileSize/contentLength)*100
			}
			elseif(fileSize){
				mainForm.edit.print("正在重新下载") 
				mainForm.progress.pos=(fileSize/contentLength)*100 
			}
		}
		
		remoteFile.onReceive = function(str,downSize,contentLength){
			onReceiveFileSize+=downSize
			
			mainForm.edit.text = "正在下载 文件大小:" + math.size64(onReceiveFileSize).format()+'/'+math.size64(contentLength).format()
			mainForm.progress.pos=tonumber(string.format("%.0f",(onReceiveFileSize/contentLength)*100))		 
		}
		//下载文件
		var ok,err,fileSize = remoteFile.download() 
				
		//解压
		import zlib.unzip
		var unzipsize=0 ; 
		var ok,err = zlib.unzip.extract( "/"+filename,"/",
    	function(fileName,extractPath,fileInfo,size,unitSize,unitName){
        	if( size !== null ){
        	    unzipsize += fileInfo.compressed_size
        		mainForm.edit.print( "正在解压文件:",fileName,size++ unitName )
        		mainForm.progress.pos=tonumber(string.format("%.0f",(unzipsize/onReceiveFileSize)*100))}
        	else {
        	mainForm.edit.print( "正在解压目录:",fileName );
        		}
        	return true;
		})
		mainForm.edit.text="解压完成!"
		mainForm.edit.print("重新启动中,请稍等...")
		fsys.delete("/"+filename)
		var getversion = string.replace(filename,'U.',''); 
		var hzm = '.'+string.split(getversion,'.')[#string.split(getversion,'.')]; 
		getversion = string.replace(filename,hzm,''); 
		getversion = string.replace(getversion,'U.','');
		$ini.write("version","num",getversion) 
    	var prcs = process(mainpath);
    	mainForm.close()
		},mainForm,filename,UpdatePackageUrl)
}

mainForm.button2.oncommand = function(id,event){
        mainForm.close();
        }
mainForm.button3.oncommand = function(id,event){
        mainForm.close();
		var prcs = process(mainpath);
        }
mainForm.onClose = function(hwnd,message,wParam,lParam){
    mainForm.text = "正在等待关闭"; }
mainForm.static.oncommand = function(id,event){	
}
win.loopMessage();


ck.aardio
[JavaScript] 纯文本查看 复制代码
import win.ui;
import win.ui.simpleWindow;
import fsys.ini
/*DSG{{*/
var winform = win.form(text="热更新设置";right=499;bottom=299;border="none")
winform.add(
bk={cls="bk";left=-5;top=0;right=505;bottom=29;dl=1;dr=1;dt=1;z=2};
button={cls="button";text="保存设置";left=132;top=247;right=332;bottom=282;z=11};
edit={cls="edit";left=52;top=80;right=465;bottom=102;edge=1;z=1};
edit2={cls="edit";left=52;top=129;right=146;bottom=151;edge=1;z=4};
edit3={cls="edit";left=318;top=128;right=464;bottom=150;edge=1;z=6};
edit4={cls="edit";left=130;top=207;right=465;bottom=229;edge=1;z=8};
edit5={cls="edit";left=131;top=169;right=466;bottom=191;edge=1;z=12};
plus={cls="plus";left=0;top=0;right=24;bottom=24;z=9};
static={cls="static";text="网址:";left=9;top=83;right=49;bottom=105;align="center";transparent=1;z=3};
static2={cls="static";text="密码:";left=9;top=132;right=49;bottom=154;align="center";transparent=1;z=5};
static3={cls="static";text="软件现行版本号:";left=212;top=131;right=317;bottom=153;align="center";transparent=1;z=7};
static4={cls="static";text="软件启动程序路径:";left=7;top=209;right=131;bottom=231;align="center";transparent=1;z=10};
static5={cls="static";text="更新程序logo路径:";left=8;top=172;right=132;bottom=193;align="center";transparent=1;z=13};
static6={cls="static";text="初始化设置";left=82;top=35;right=409;bottom=59;align="center";font=LOGFONT(h=-22;name='楷体';weight=700);transparent=1;z=14}
)
/*}}*/

winform.onMouseDown  = function(wParam,lParam){
	winform.hitCaption()	
}
win.ui.simpleWindow(winform);

var $ini = fsys.ini("/updata.ini")
var version = $ini.read("version","num");
var mainpath = $ini.read("set","mainpath"); 
var url = $ini.read("lanzouyun","url");
var pwd = $ini.read("lanzouyun","pwd");
var logopath = $ini.read("set","logopath");
winform.plus.background = logopath;
if(version==null or mainpath==null or url==null or pwd==null){
	winform.edit.text="https://guoren.lanzouo.com/b00wvmvli"
	winform.edit2.text="0000"
	winform.edit3.text="1.0.0"
	winform.edit4.text="/小白点/小白点A股助手.exe"
	winform.edit5.text="/小白点/xbd.png"

}
else {
	winform.edit.text=url
	winform.edit2.text=pwd
	winform.edit3.text=version
	winform.edit4.text=mainpath
	winform.edit5.text=logopath	
}

winform.button.oncommand = function(id,event){

	$ini.write("lanzouyun","url",winform.edit.text);
	$ini.write("lanzouyun","pwd",winform.edit2.text);
	$ini.write("version","num",winform.edit3.text);
	$ini.write("set","logopath",winform.edit5.text); 
	$ini.write("set","mainpath",winform.edit4.text);
	winform.endModal("已设置")
        }
winform.show();
win.loopMessage();
return winform;

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
february + 1 + 1 谢谢@Thanks!

查看全部评分

推荐
 楼主| 善良的果仁 发表于 2023-8-28 15:22 |楼主
Marken888 发表于 2023-8-28 15:18
那就是不同用户区别对待了,我的都有密码

你尝试新建一个带密码的文件夹,然后在这个文件夹里面上传文件,之后什么都不要操作,直接分享刚刚创建的文件夹,用无痕模式打开刚刚的分享链接,输入文件夹密码,下载东西的时候看看需不需要额外的文件密码
推荐
 楼主| 善良的果仁 发表于 2023-8-28 15:37 |楼主
Marken888 发表于 2023-8-28 15:28
现在是dll不行了,看来那个支持类型不是很准确

我后面再改一下,U.开头.zip结尾,中间存在相同版本号的,例如U.1.0.1-1.zip、U.1.0.1-2.zip这两个文件都存在1.0.1,那就都下载,都解压,唯一要注意的是避免同名文件覆盖。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Marken888 + 1 + 1 不错的解决思路

查看全部评分

推荐
 楼主| 善良的果仁 发表于 2023-8-28 15:11 |楼主
Marken888 发表于 2023-8-28 14:29
我看了下,蓝奏云不支持关闭分享密码,这个功能属于会员功能,收费

不设置就没有密码,创建一个带密码的文件夹,然后直接往文件夹中传文件,上传文件默认都没有密码
推荐
 楼主| 善良的果仁 发表于 2023-8-28 14:03 |楼主
hjtx2022 发表于 2023-8-28 13:57
就是需要这种,一直没弄好,易语言的,有源码吗

不是易语言 ,是aardio+python
推荐
february 发表于 2023-8-30 09:18
感谢分享,能否分享下aardio的源码

免费评分

参与人数 1吾爱币 +1 收起 理由
善良的果仁 + 1 已分享

查看全部评分

推荐
aq425518860 发表于 2023-8-28 13:44
开发者需要你这东西
4#
wszjf 发表于 2023-8-28 13:35
这个工具非常不错,就是不知会不会被兰奏封堵
5#
bohong65 发表于 2023-8-28 13:41
可以奥,很巧妙的工具
6#
不知道改成啥 发表于 2023-8-28 13:51
wszjf 发表于 2023-8-28 13:35
这个工具非常不错,就是不知会不会被兰奏封堵

咋拦,难道关了么
7#
hjtx2022 发表于 2023-8-28 13:57
就是需要这种,一直没弄好,易语言的,有源码吗
8#
seny1163 发表于 2023-8-28 14:07
感谢分享,收藏备用,希望不要被官方针对。
头像被屏蔽
9#
zjy0051 发表于 2023-8-28 14:15
提示: 作者被禁止或删除 内容自动屏蔽
10#
ziyunyi 发表于 2023-8-28 14:27
功能很棒!求源码,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 16:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表