air升级程序利用7za.exe curl.exe后台升级

来源:互联网 发布:网络连接受限制怎么办 编辑:程序博客网 时间:2024/06/05 07:23
package  fanlib.air
{
    import com.hexagonstar.util.debug.Debug;
    
    import flash.desktop.NativeProcess;
    import flash.desktop.NativeProcessStartupInfo;
    import flash.events.Event;
    import flash.events.NativeProcessExitEvent;
    import flash.events.ProgressEvent;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.net.URLStream;
    import flash.utils.ByteArray;
    
    //air  升级
    public class AirUpgrade
    {
        //升级
        static var urlLoader:URLLoader;
        public static var localUpdateProgramVer:Number=-1;
        public static var netUpdateProgramVer:Number=-1;
        static var netUpdateFilePath:String;
        static var updateUrlStream:URLStream;
        static var updateFile:File;
        static var localIniData:String;
        public static var netIniData:String;
        public static function update():void{
            if(urlLoader==null){
                urlLoader=new URLLoader();
            }
            checkUpdateProgramVer();
        }
        //检查升级程序版本
        private static function checkUpdateProgramVer():void{
            //先读取本地升级程序版本
            urlLoader.removeEventListener(Event.COMPLETE,updateIniLoadHandle);
            urlLoader.addEventListener(Event.COMPLETE,updateIniLoadHandle);
            urlLoader.load(new URLRequest("client.ini"));
        }
        
        private static var updateUrl:String = "";//
        private static function updateIniLoadHandle(event:Event):void
        {
            
            urlLoader.removeEventListener(Event.COMPLETE,updateIniLoadHandle);
            localIniData=urlLoader.data.toString();
            var match:Array=localIniData.match(/ver=(\d+[\\.]{0,1}\d*)/);
            
            updateUrl = localIniData.match(/url=(.+\.ini)/i)[1];
            
            
            if(match!=null&&match.length>1){
                localUpdateProgramVer=Number(match[1]);
                checkNetUpdateProgramVer();
            }else{
                //runMainUpdateApp();
            }
        }
        private static function checkNetUpdateProgramVer():void{
            urlLoader.removeEventListener(Event.COMPLETE,updateNetIniLoadHandle);
            urlLoader.addEventListener(Event.COMPLETE,updateNetIniLoadHandle);
            urlLoader.load(new URLRequest(updateUrl));
        }
        
        private static function updateNetIniLoadHandle(event:Event):void
        {
            urlLoader.removeEventListener(Event.COMPLETE,updateNetIniLoadHandle);
            netIniData=urlLoader.data.toString();
            var match:Array=netIniData.match(/ver=(\d+[\\.]{0,1}\d*)/);
            if(match!=null&&match.length>1){
                netUpdateProgramVer=Number(match[1]);
                if(netUpdateProgramVer>localUpdateProgramVer){
                    runMainUpdateApp();
                }
            }else{
                //runMainUpdateApp();
            }
        }
 
        //运行主升级程序
        private static function runMainUpdateApp():void{
            if(netUpdateProgramVer==localUpdateProgramVer+1){
                var match1:Array=netIniData.match(/url=(.+\.7z)/i);
                AirCurl.startInstall(match1[1]);
            }else{
                var match2:Array=netIniData.match(/urlall=(.+\.7z)/i);
                AirCurl.startInstall(match2[1]);
            }
        }
    }
}
 
原理:首先读取client.ini的升级地址server.ini。然后利用curl下载升级包。升级包下载完利用7za解压文件
 
升级完成
 
如有不明白请到www.fanshymy.com留言
0 0