自动更新作用


复制代码 代码如下:

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;
}

« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3