Aardio自带程序更新模块使用

小肥羊 9月前 1429

因为有人一直问程序的更新方案如何解决,这里把自己用的一套方案给分享一下。

使用的是aardio自带的更新模组。

1、先看效果


2、更新包发布

 -- 直接在主程序生成目录dist中,把需要的所有文件放在都这里,如下图


更新包发布,使用  范例 -> 编码 -> 升级包制作工具,直接制作升级包,注意配置好网址目录

生成的更新文件,将这些文件全部放入服务器目录


整个配置过程就完成了。


这时启动更新程序就有如下提示:



下面是更新程序的代码,仅供参考

import win.ui;
import win.ui.atom;
/*DSG{{*/
var winform = win.form(text="小肥羊自动更新工具演示";right=399;bottom=353;border="thin";max=false;min=false;mode="popup";sysmenu=false)
winform.add(
button={cls="button";text="退出";left=251;top=310;right=346;bottom=347;z=1};
button2={cls="button";text="启动程序";left=90;top=310;right=185;bottom=343;z=5};
plus={cls="plus";left=0;top=0;right=400;bottom=140;foreBottom=-80;foreRepeat="expand";foreground="\res\123.gif";z=2};
richedit={cls="richedit";left=0;top=138;right=400;bottom=241;clipch=1;multiline=1;vscroll=1;z=3};
tips={cls="static";left=28;top=247;right=375;bottom=300;color=8388608;transparent=1;z=4}
)
/*}}*/

var atom,hwnd/*冲突窗口的句柄,该函数会自动激活此窗口*/ = winform.atom("296E7EC1-C67F-4967-9488-4E56B78ACFFF");
if(!atom){
	/*为窗口设置原子值可以避免一个程序重复运行多个实例*/
	win.quitMessage();	return;
}


winform.button.oncommand = function(id,event){
	winform.close();
}
import console;
import fsys.version;
import fsys;
import fsys.update.app;
import fsys.update.dlMgr;
var s_exe="";
var s_success=false;
s_url = "https://aardio.online/update/example/version.txt"
s_version = "0.0.0.1";

// 可以接受命令行参数,由调用的程序指定需要检测版本的主文件,如果没有,直接默认为0.0.0.1版,基本就是强制更新
var arg = _CMDLINE ? ..string.trim(_CMDLINE);
if (io.exist(arg)){
	s_version = fsys.version.getInfo(arg).fileVersion;
}

//定义一个简单的删除主程序的函数
var del_main = function(){
    if (io.exist(arg)){
    	return io.remove(arg)
    }
    return true; 
}


//定义一个显示框的输出
var dis_info  = function(title,str=""){
    if str != ""{
	winform.richedit.appendText(title + ": " + str + '\r\n');
	}
}
//定义一个标题作为输出提示
var dis_info2  = function(title,str=""){
    if str != ""{
	winform.tips.text = (title + ": " + tostring(str) );
	}
}

//定义基础的更新文件下载目录
down  = fsys.update.dlMgr(s_url,"\down\",s_version)
fsys.delete("\down\")
down.startUpdate(1000)


down.onConfirmDownload =function(isUpdated,appVersion,latestVersion,description){ 
	/*检测版本完成触发此函数,  
	@isUpdated参数表示是否更新,  
	@appVersion参数为当前版本,  
	@latestVersion参数为更新的版本号,  
	@description为更新说明  
	返回真继续下载更新文件  
	不指定此事件时默认返回@isUpdated参数*/
	dis_info("需要更新",tostring( isUpdated))
	dis_info("当前版本",appVersion)
	dis_info("最新版本",latestVersion)
	dis_info("更新说明",description)
	
	return isUpdated; 

}

down.onDownloadBegin = function(totalSize,fileTotal){
    dis_info2("开始下载更新文件", ..fsys.formatSize(totalSize),fileTotal)
}
down.onDownloadFile = function(path,contentLength,fileSize){
    dis_info2("正在下文件", path)   
}

down.onChecksumBegin = function(total){
    dis_info2("开始检验,文件总数", total)
}
down.onChecksum = function(count,total){
     dis_info2("已校检文件",  count)
}
down.onError = function(err,filename){
	/*导致错误的文件路径或URL  该值可能为空*/
    dis_info2("更新遇到错误:",err +"--" +filename )
}




down.onEnd = function(updater,saveDir,appDir,mainPath,updateFilesCount){
    /*更新文件已准备就绪,  
		以下参数中的路径已经转换为绝对路径: 
		
		updater 执行文件更新的EXE路径  
		saveDir 下载升级包的存储目录  
		appDir 需要更新的应用程序目录  
		mainPath 此应用程序的启动EXE路径  
		updateFilesCount 更新的文件数*/
		dis_info2("文件已下载完成,待更新文件数:", updateFilesCount)  
		/*
		dis_info(updater," 执行文件更新的EXE路径  ")
		dis_info(saveDir ,"下载升级包的存储目录 ")
		dis_info(appDir," 需要更新的应用程序目录" )
		dis_info(mainPath ,"此应用程序的启动EXE路径")
		*/
		s_exe = mainPath
		app = fsys.update.app(saveDir,appDir,false,true);
		if(del_main()!=true){
			win.msgboxErr("文件被占用!更新失败!","更新出错")
			return ; 
		}
		win.delay(1000)
		app.apply()
		
		app.onCopyFile = function(path,count){
			dis_info2("正在复制",path)
		}
		
		app.onEnd = function(success){
			dis_info2("更新完成",app.updateInfo.version );
			s_success = true;
		}
		
		app.onError = function(err,filename){
			dis_info2("发生错误",filename)
		}
}


winform.button2.oncommand = function(id,event){
	if (s_success and s_exe !=""){
		import process;
		process.execute(s_exe)
		winform.close()
	}else{
		win.msgbox("更新未完成","请稍候")
	}
}

winform.show();
win.loopMessage();
return winform;


代码不是很完善,在此抛砖引玉,供大家提高!

最新回复 (9)
  • 光庆 9月前
    0 2

  • coso 9月前
    0 3

  • Viewer8122 9月前
    0 4

  • lcj21 9月前
    0 5
    向大佬学习,感谢分享!
  • orti 8月前
    0 6
    强强强!!!!!
  • aardio 7月前
    0 7


  • aardio 7月前
    0 8
    真是漂亮,更新这种解决了我很大的问题,谢谢羊仔
  • hi_aardio 7月前
    0 9

    更新包发布,使用  范例 -> 编码 -> 升级包制作工具,直接制作升级包,注意配置好网址目录

     这个路径有点问题,应该是 工具 -> 编码 -> 升级包制作工具

  • tanzh 7月前
    0 10
    强强强,学习学习
返回