自动更新作用

代码如下:

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=center><span 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.length>0)
                                                {
                                                    document.location.reload();
                                                }
                                            }

}
CLASS_AUTOUPDATE.prototype.check = function()
{
    var _current_version,_new_version,_exist_new_ver;

//检查配置文件
    var configXML = new CLASS_XML("xml\\autoupdate.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'><tr><td valign='top'>有新版本,是否更新?<!--insert//--></td></tr></table>";
        //tempMessageContent[tempMessageContent.length] = "<br/><br/>";
        tempMessageContent[tempMessageContent.length] = "<div align=center><span 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'><tr><td 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;i<updateFileNodes.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'><tr><td valign='top'>没有需要更新的文件<!--insert//--></td></tr></table>";
            }
            else
            {
                var configXML    = new CLASS_XML("xml\\autoupdate.xml");
                //添加更新信息
                if(configXML.error==false&&THIS.updateInfo.length>0)
                {
                    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'><tr><td 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;i<this.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("xml\\autoupdate.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'><tr><td 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.length>0?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("xml\\autoupdate.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;i<tempSystemFileNodes.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;i<p.length;i++){
        t += p[i] + "\\";

try
        {
            if(!fso.FolderExists(t))
            {
                fso.CreateFolder(t);
            }
        }
        catch(e)
        {
            return false;
        }
    }

return true;
}

(0)

相关推荐

  • 自动更新作用

    复制代码 代码如下: function CLASS_AUTOUPDATE(instanceName,win) {     this.instanceName    = instanceName;     this.updating        = false;     this.error            = false;     this.updateInfo        = "";     this.nextVersion    = "";     t

  • 用mysql触发器自动更新memcache的实现代码

    mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的自动更新.简单记录一下安装测试步骤. 安装步骤 安装memcached,这个步骤很简单,随处可见 安装mysql server 5.1RC,安装办法也很大众,不废话了 编译libmemcached,解压后安装即可./configure; make; make install 编译Memcached Functio

  • 采用C#实现软件自动更新的方法

    本文实例分析了采用C#实现软件自动更新的方法,是非常实用的功能,值得学习和借鉴.具体如下: 1.问题概述: 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可 维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素.有很多企业用户就是因为这个原因而放弃使用C/S.然而当一个应用必须要使用C/S 结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程

  • 网页爬虫之cookie自动获取及过期自动更新的实现方法

    本文实现cookie的自动获取,及cookie过期自动更新. 社交网站中的很多信息需要登录才能获取到,以微博为例,不登录账号,只能看到大V的前十条微博.保持登录状态,必须要用到Cookie.以登录www.weibo.cn 为例: 在chrome中输入:http://login.weibo.cn/login/ 分析控制台的Headers的请求返回,会看到weibo.cn有几组返回的cookie. 实现步骤: 1,采用selenium自动登录获取cookie,保存到文件; 2,读取cookie,比较

  • 浅析.Net Core中Json配置的自动更新

    Pre 很早在看 Jesse 的 Asp.net Core快速入门 的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重"造轮子"情节的程序员,最近在折腾一个博客系统,也想造出一个这样能自动更新以Mysql为数据源的ConfigureSource,于是点开了AddJsonFile这个拓展函数的源码,发现别有洞天,蛮有意思,本篇文章就简单地聊一聊Json config的ReloadOnChange是如何实现的,在学习

  • Jpa 实现自动更新表中的创建日期和修改时间

    一般来说创建时间和修改时间 两个字段是一个实体类必备的. 在阿里Java开发手册中也对此的说明: [强制]表必备三字段:id, create_time, update_time. 说明:其中 id 必为主键,类型为 bigint unsigned.单表时自增.步长为 1.create_time, update_time 的类型均为 datetime 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新. mysql 实现添加时间自动添加更新时间自动更新 在JPA 中也是支持新的数据保存是自

  • c# 如何实现自动更新程序

    主要功能介绍 实现文件的自动更新.主要功能: 支持整包完全更新,即客户端只需输入一个服务器地址,即可下载所有文件. 支持增量更新,即只更新指定的某几个文件. 支持自动更新程序的更新 更新界面如图: 客户端 main方法入口 /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { //在主程序中 更新替换自动升级程序 //ReplaceAutoUpgrade(); bool isEnte

  • C# WinForm实现自动更新程序之客户端的示例代码

    目录 前言 开发环境 开发工具 实现代码 实现效果 前言 第二步理论上我们该写客户端了,但是,在此之前,需要先介绍下一些必要的方法以及操作. 写代码还是要尽量的保证通用性,以便以后需要的时候可以拿来稍微改改甚至直接使用.所以在这里我们将自动更新的程序抽象出来,即对于客户端来说,它只包含三个文件(AutoUpdate.dll.AutoUpdate.exe.UpdateList.xml,如果是.NET Framework的话,其实是没有AutoUpdate.dll文件的,就一个exe就足够了.这也是

  • python自动更新pom文件的方法

    目录 前言 自定义实现版本更新 SHELL 实现 为什么使用SHELL python实现 文件思考 xml.etree.ElementTree 解析xml 读取com.alibaba.fastjson 的版本号 保存xml 修改xml后节点多了 中文乱码 标准化xml 修改xml后原来的注释丢了 获取不到子节点 优雅解析带命名空间的xml 总结 其他说明 前言 项目越来越多,版本管理越来越麻烦,在项目上我使用 maven version 来进行版本管理.主要还是在分布式项目中模块众多的场景中使用

  • PostgreSQL更新表时时间戳不会自动更新的解决方法

    PostgreSQL更新表时时间戳不会自动更新的解决方法,具体如下 操作系统:CentOS7.3.1611_x64 PostgreSQL版本:9.6 问题描述 PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新. 在mysql中可以在创建表时定义自动更新字段,比如 : create table ab ( id int, changetimestamp timestamp NOT NULL default CURRENT_TIMEST

随机推荐