【 tulaoshi.com - Web开发 】
                             
                            代码如下:
function CLASS_AUTOUPDATE(instanceName,win) 
{ 
    this.instanceName    = instanceName; 
    this.updating        = false; 
    this.error            = false; 
    this.updateInfo        = ""; 
    this.nextVersion    = ""; 
    this.ver            = ""; 
    this.win            = win; 
    this.updatePath        = ""; 
    this.updateFileName = ""; 
    this.softName        = ""; 
    this.refresh(); 
} 
CLASS_AUTOUPDATE.prototype.onafterupdate = function() 
{ 
    var _window                = this.win; 
    var tempMessageWidth    = 360; 
    var tempMessageHeight    = 160; 
    var tempMessageLeft        = (document.body.clientWidth - tempMessageWidth) /2; 
    var tempMessageTop        = (document.body.clientHeight - tempMessageHeight) /2; 
    var feature = { 
        title:"更新完毕", 
        width:tempMessageWidth, 
        height:tempMessageHeight, 
        left:tempMessageLeft, 
        top:tempMessageTop, 
        borderColor:"#8B89A1", 
        backgroundColor:"#FFFFFF", 
        color:"#000000", 
        titleBackgroundColor:"#8B89A1", 
        titleColor:"#FFFFFF", 
        dragable:true 
    }; 
    var THIS = this; 
    var tempMessageContent    = []; 
    //tempMessageContent[tempMessageContent.length] = "div style='font-size:12px;padding:5px'"; 
    tempMessageContent[tempMessageContent.length] = this.updateInfo; 
    //tempMessageContent[tempMessageContent.length] = "br/br/"; 
    tempMessageContent[tempMessageContent.length] = "div align=centerspan class='bt'input type='button' value=' OK ' class='bt' id='bt_update_ok'/span/div"; 
    tempMessageContent[tempMessageContent.length] = "/div"; 
    _window.open("updateOk",feature); 
    _window.write("updateOk",tempMessageContent.join(""),false); 
    _window.items["updateOk"].all("bt_update_ok").onclick = function() 
                                                            {                                                                 
                                                                _window.close("updateOk");                                                                 
                                                            } 
    _window.items["updateOk"].onunload =    function() 
                                            {                                                 
                                                if(THIS.error==false&&THIS.updateFileList.length0) 
                                                { 
                                                    document.location.reload(); 
                                                } 
                                            } 
} 
CLASS_AUTOUPDATE.prototype.check = function() 
{ 
    var _current_version,_new_version,_exist_new_ver; 
    //检查配置文件 
    var configXML = new CLASS_XML("xmlautoupdate.xml"); 
    if(configXML.error==false) 
    { 
        var _update_date,_autoupdate_day,_current_version; 
        var _save_or_not; 
        var _d  = new Date(); 
        var _dd = _d.getFullYear() + "-" + (_d.getMonth()+1) + "-" + _d.getDate(); 
        //检查是否有更新时间段设置 
        if(configXML.selectSingleNode("/Config/UpdateDate")==null) 
        { 
            configXML.setText("/Config","UpdateDate", _dd); 
            _update_date = _dd; 
            _save_or_not = true; 
        } 
        else 
        { 
            _update_date = configXML.getText("/Config","UpdateDate", "1900-01-01"); 
        } 
        if(configXML.selectSingleNode("/Config/AutoUpdateDay")==null) 
        { 
            configXML.setText("/Config","AutoUpdateDay", "10"); 
            _autoupdate_day = "10"; 
            _save_or_not = true; 
        } 
        else 
        { 
            _autoupdate_day = configXML.getText("/Config","AutoUpdateDay", "10"); 
        } 
        _autoupdate_day = _autoupdate_day *1; 
        if(configXML.selectSingleNode("/Config/CurrentVersion")==null) 
        { 
            configXML.setText("/Config","CurrentVersion", "0.32"); 
            _current_version = "0.32"; 
            _save_or_not = true; 
        } 
        else 
        { 
            _current_version = configXML.getText("/Config","CurrentVersion", "0.32"); 
        } 
        _current_version = _current_version * 1; 
        //判断是否今天去连接服务器 
        var _od = new Date(_update_date.replace(/-/g, "/")); 
        if(_d.getTime()-_od.getTime()_autoupdate_day*24*3600*1000) 
        { 
            var newDoc        = new CLASS_XML(); 
                newDoc.loadRemoteFile(this.updatePath + this.softName + "/" + this.updateFileName);             
            if(newDoc.selectSingleNode("/Config/CurrentVersion")==null) 
            { 
                newDoc.setText("/Config","CurrentVersion", "0.32"); 
                _new_version = "0.32"; 
            } 
            else 
            { 
                _new_version = newDoc.getText("/Config","CurrentVersion", "0.32"); 
            } 
            _new_version = _new_version * 1; 
            //检查是否有新版本 
            if(_new_version_current_version) 
            { 
                _exist_new_ver = true; 
            } 
            configXML.setText("/Config","UpdateDate",_dd); 
            _save_or_not = true; 
        } 
        if(_save_or_not) 
        { 
            configXML.save(); 
        } 
    } 
    if(_exist_new_ver) 
    { 
        var _window                = this.win; 
        var tempMessageWidth    = 260; 
        var tempMessageHeight    = 120; 
        var tempMessageLeft        = (document.body.clientWidth - tempMessageWidth) /2; 
        var tempMessageTop        = (document.body.clientHeight - tempMessageHeight) /2; 
        var feature = { 
            title:"升级", 
            width:tempMessageWidth, 
            height:tempMessageHeight, 
            left:tempMessageLeft, 
            top:tempMessageTop, 
            borderColor:"#8B89A1", 
            backgroundColor:"#FFFFFF", 
            color:"#000000", 
            titleBackgroundColor:"#8B89A1", 
            titleColor:"#FFFFFF", 
            dragable:true 
        }; 
        var THIS = this; 
        var tempMessageContent    = []; 
        //tempMessageContent[tempMessageContent.length] = "div style='font-size:12px;padding:5px'"; 
        tempMessageContent[tempMessageContent.length] = "table width='100%' height='60' cellPadding='10'trtd valign='top'有新版本,是否更新?!--insert//--/td/tr/table"; 
        //tempMessageContent[tempMessageContent.length] = "br/br/"; 
        tempMessageContent[tempMessageContent.length] = "div align=centerspan class='bt'input type='button' value=' Yes ' class='bt' id='bt_update_yes'/span  span class='bt'input type='button' value=' No ' class='bt' id='bt_update_no'/span/div"; 
        tempMessageContent[tempMessageContent.length] = "/div"; 
        _window.open("update_or_not",feature); 
        _window.write("update_or_not",tempMessageContent.join(""),false); 
        THIS.ver = _current_version; 
        _window.items["update_or_not"].all("bt_update_yes").onclick = function() 
                                                                {         
                                                                    THIS.ver = _new_version; 
                                                                    _window.close("update_or_not"); 
                                                                    THIS.update(); 
                                                                } 
        _window.items["update_or_not"].all("bt_update_no").onclick = function() 
                                                                {         
                                                                    _window.close("update_or_not"); 
                                                                } 
        _window.items["update_or_not"].onunload =    function() 
                                                {                                                 
                                                } 
    } 
} 
CLASS_AUTOUPDATE.prototype.update = function() 
{ 
    this.updating    = !this.updating; 
    var t            = new Date(); 
    var THIS        = this; 
    if(this.error == false) 
    { 
    //得到新配置文档 
    var newDoc        = new CLASS_XML(); 
        newDoc.loadRemoteFile(this.updatePath + this.softName + "/" + this.updateFileName); 
        this.error = newDoc.error; 
        if(this.error) 
        { 
            THIS.updating    = false; 
            THIS.updateInfo    = "table width='100%' height='100' cellPadding='10'trtd valign='top'连接服务器失败!--insert//--/td/tr/table"; 
        } 
        else 
        { 
            var updateFileNodes = newDoc.selectNodes("//SystemFile"); 
            var updateInfoNode    = newDoc.selectSingleNode("//UpdateInfo"); 
            var nextVersion        = newDoc.selectSingleNode("//nextversion"); 
            if(updateInfoNode != null) 
            { 
                THIS.updateInfo = updateInfoNode.childNodes[0].text; 
            } 
            if(nextVersion != null) 
            { 
                THIS.nextVersion = nextVersion.childNodes[0].text; 
            } 
            THIS.updateFileList = [];             
            for(var i=0;iupdateFileNodes.length;i++) 
            { 
                var curUpdateFileName        = updateFileNodes[i].getAttribute("name").toLowerCase(); 
                var curUpdateFileVersion    = updateFileNodes[i].getAttribute("version").toLowerCase(); 
                var curUpdateFilePath        = updateFileNodes[i].getAttribute("path").toLowerCase(); 
                if(THIS.systemFiles[curUpdateFileName] == null || THIS.systemFiles[curUpdateFileName] != curUpdateFileVersion) 
                {                                     
                    //本地没有该文件或者版本号不一致 
                    THIS.updateFileList[THIS.updateFileList.length] =  
                    { 
                        name    :curUpdateFileName, 
                        version    :curUpdateFileVersion, 
                        path    :curUpdateFilePath, 
                        type    :"text" 
                    }; 
                } 
            } 
            newDoc.dispose(); 
            if(THIS.updateFileList.length == 0) 
            { 
                THIS.updating    = false; 
                THIS.updateInfo    = "table width='100%' height='100' cellPadding='10'trtd valign='top'没有需要更新的文件!--insert//--/td/tr/table"; 
            } 
            else 
            { 
                var configXML    = new CLASS_XML("xmlautoupdate.xml"); 
                //添加更新信息 
                if(configXML.error==false&&THIS.updateInfo.length0) 
                { 
                    var _updateInfo    = configXML.createElement("UpdateInfo"); 
                    var _cdata        = configXML.createCDATASection(THIS.updateInfo); 
                    _updateInfo        .appendChild(_cdata); 
                    configXML.root().appendChild(_updateInfo); 
                    //添加下版本预告 
                    var _nextVersion = configXML.selectSingleNode("//nextversion"); 
                    if( _nextVersion==null) 
                    { 
                        var __next = configXML.createElement("nextversion"); 
                        var __cdata= configXML.createCDATASection(THIS.nextVersion); 
                        __next.appendChild(__cdata); 
                        configXML.root().appendChild(__next); 
                    } 
                    else 
                    { 
                        if(_nextVersion.childNodes.length==0) 
                        { 
                            _nextVersion.appendChild(configXML.createCDATASection("")); 
                        } 
                        _nextVersion.childNodes[0].text = THIS.nextVersion; 
                    } 
                    configXML.setText("/Config","CurrentVersion",THIS.ver); 
                    configXML.save(); 
                } 
                configXML.dispose(); 
                THIS.updateFile(); 
            } 
        }             
    } 
    else 
    { 
        this.updateInfo = "table width='100%' height='100' cellPadding='10'trtd valign='top'加载配置文件失败!!--insert//--/td/tr/table"; 
    } 
    this.updating = false; 
    this.onafterupdate(); 
} 
CLASS_AUTOUPDATE.prototype.updateFile = function(curUpdateId) 
{ 
    var t        = new Date(); 
    var THIS    = this; 
    for(var i= 0;ithis.updateFileList.length;i++) 
    { 
        var curUpdateFile = this.updateFileList[i]; 
        if(curUpdateFile.type == "base64") 
        { 
            var url = this.updatePath  + this.softName + "/base64.aspx?src=" + curUpdateFile.name + "&t=" + t.valueOf(); 
        } 
        else if(curUpdateFile.type == "text") 
        { 
            var url = this.updatePath + this.softName + "/" + curUpdateFile.path + "/" + curUpdateFile.name; 
        } 
        //下载文件 
        var errors     = this.downloadFile(url,curUpdateFile.path,curUpdateFile.name); 
        if(this.error==false) 
        { 
            //记录当前版本信息                     
            var configXML    = new CLASS_XML("xmlautoupdate.xml"); 
            if(configXML.error==false) 
            { 
                var systemFiles = configXML.selectSingleNode("//SystemFiles"); 
                if(systemFiles    == null) 
                { 
                    systemFiles = configXML.createElement("SystemFiles"); 
                    configXML.selectSingleNode("/Config").appendChild(systemFiles); 
                } 
                var systemFile    = configXML.selectSingleNode("//SystemFiles/SystemFile[@name='" + curUpdateFile.name.toLowerCase() + "']"); 
                if(systemFile    == null) 
                { 
                    systemFile    = configXML.createElement("SystemFile"); 
                    systemFile.setAttribute("name",curUpdateFile.name.toLowerCase()); 
                    systemFile.setAttribute("path",curUpdateFile.path.toLowerCase()); 
                    configXML.selectSingleNode("//SystemFiles").appendChild(systemFile); 
                } 
                systemFile.setAttribute("version",curUpdateFile.version); 
                configXML.save(); 
                configXML.dispose(); 
                this.error         = false; 
                this.updateInfo += errors + "n"; 
            } 
            else 
            { 
                this.updateInfo += "table width='100%' height='100' cellPadding='10'trtd valign='top'加载配置文件出错!!--insert//--/td/tr/table"; 
            } 
        } 
    } 
} 
CLASS_AUTOUPDATE.prototype.downloadFile = function(url,path,filename) 
{ 
    try 
    { 
        var xmlHTTP    =    new ActiveXObject("Microsoft.XMLHTTP"); 
            xmlHTTP.open("Get",url,false); 
            xmlHTTP.send(); 
        if(xmlHTTP.readyState==4&&xmlHTTP.status==200) 
        { 
            var adodbStream = new ActiveXObject("ADODB" + "." + "Stream"); 
            //判断目录是否存在,不存在则创建 
            this.buildPath(path); 
            var strLocalURL = path.length0?path + "" +filename:filename; 
            //1=adTypeBinary 
            adodbStream.Type= 1;         
            adodbStream.Open(); 
            adodbStream.write(xmlHTTP.responseBody); 
            adodbStream.SaveToFile(strLocalURL,2); 
            adodbStream.Close(); 
            adodbStream        = null; 
            xmlHTTP            = null; 
        } 
        else 
        { 
            this.error        = true; 
            return    filename + "下载失败"; 
        } 
        return ""; 
    } 
    catch(e) 
    { 
        this.error        = true; 
        return    e.description; 
    } 
} 
CLASS_AUTOUPDATE.prototype.refresh = function() 
{ 
    var configXML = new CLASS_XML("xmlautoupdate.xml"); 
    if(configXML.error==false) 
    { 
        var _softName        = configXML.selectSingleNode ("/Config/SoftName"); 
        var _updatePath        = configXML.selectSingleNode ("/Config/UpdatePath"); 
        var _updateFileName    = configXML.selectSingleNode ("/Config/UpdateFileName"); 
        this.updatePath        = _updatePath     !=null?_updatePath.text    :"http://dooit.3322.org/"; 
        this.softName        = _softName         !=null?_softName.text        :"cc"; 
        this.updateFileName = _updateFileName!=null?_updateFileName.text:"autoupdate.xml"; 
        this.systemFiles = {}; 
        var tempSystemFileNodes = configXML.selectNodes("/Config/SystemFiles/SystemFile"); 
        for(var i=0;itempSystemFileNodes.length;i++) 
        { 
            this.systemFiles[tempSystemFileNodes[i].getAttribute("name")] = tempSystemFileNodes[i].getAttribute("version"); 
        } 
    } 
    else 
    { 
        this.error = true; 
    } 
    configXML.dispose();     
} 
CLASS_AUTOUPDATE.prototype.buildPath = function(path) 
{ 
    var _baseUrl    = unescape(document.location.href.substring(document.location.href.lastIndexOf("/")+1,-1)).replace(/^file:////i,"").replace(///g,""); 
    var _path        = path.replace(/^s*|s*$/g,""); 
    var _fullPath    = ""; 
    //得到全路径 
    if(/^w:/.test(_path) == false){ 
        _fullPath = _baseUrl + _path; 
    }else{ 
        _fullPath = _path; 
    } 
    var p    = _fullPath.split(/|//g); 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 
    var t    = ""; 
    for(var i=0;ip.length;i++){ 
        t += p[i] + ""; 
        try 
        { 
            if(!fso.FolderExists(t)) 
            { 
                fso.CreateFolder(t); 
            } 
        } 
        catch(e) 
        { 
            return false; 
        } 
    } 
    return true; 
}