ASP在线升级程序

转载 2006年05月17日 09:15:00

<%
'文件名:updata.asp
'远程地址
const url="http://localhost/test/"

action=request("action")
if action="updata" then
 download(url&"config.txt")
 download(url&"pack.jpg")
 response.Write("下载成功<a href='updata.asp?action=install'>安装</a>")
elseif action="install" then
 str=openfile("config.txt")
 if str="" then
  response.write "缺少本地配置文件config.txt"
 else
  size=RegExpTest("size",str)
  call install("pack.jpg",size)
 end if
else
 str=getpage(url&"config.txt")
 if str="" then
  response.write "不存在可用更新或者本地配置不正确"
  response.end
 end if

 str1=openfile("config.txt")
 if str1="" then
  response.write "缺少本地配置文件config.txt无法获知本地程序的安装时间"
  response.end
 end if

 updatatime=RegExpTest("time",str)
 updatatime1=RegExpTest("time",str1)

 if DateDiff("d",updatatime1,updatatime)>0 then
  response.Write("存在可用更新,更新日期:"&updatatime&"<a href='updata.asp?action=updata'>下载</a>")
 else
  response.write "您的程序是最新的了"
 end if
end if

function openfile(filename)
set fso=server.CreateObject("scripting.filesystemobject")
if fso.fileexists(server.MapPath(filename)) then
 set f1=fso.opentextfile(server.mappath(filename),1,true)
 openfile=f1.readall
 f1.close
else
 openfile=""
end if
set fso=nothing
end function

function getpage(url)
set xmlhttp=server.createobject("Microsoft.XMLHTTP")
xmlhttp.open "get",url,false
xmlhttp.send
if xmlhttp.status<>200 then
 getpage=""
else
 getpage=bytes2BSTR(xmlhttp.ResponseBody)
end if
end function

Function bytes2BSTR(vIn)
dim strReturn
dim i,ThisCharCode,NextCharCode
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function

Function RegExpTest(patrn,strng)
Dim regEx,Match,Matches'建立变量。
Set regEx = New RegExp'建立正则表达式。
regEx.Pattern = patrn&"=(.+?)/n"'设置模式。
regEx.IgnoreCase = True'设置是否区分字符大小写。
regEx.Global = True'设置全局可用性。
Set Matches = regEx.Execute(strng)'执行搜索。
For Each Match in Matches'遍历匹配集合。
RetStr = Match.Value
Next
RegExpTest = replace(RetStr,patrn&"=","")
End Function

function download(url)
 temp=split(url,"/")
 filename=temp(ubound(temp))
 set xmlhttp=server.createobject("Microsoft.XMLHTTP")
 xmlhttp.open "get",url,false
 xmlhttp.send
 if xmlhttp.status<>200 then
  download=""
 else
  set fso=server.createobject("scripting.filesystemobject")
  if fso.fileexists(server.mappath(filename)) then
   fso.deletefile(server.mappath(filename))
  end if
  set fso=nothing
  img=xmlhttp.ResponseBody
  set objAdostream=server.createobject("ADODB.Stream")
  objAdostream.Open
  objAdostream.type=1
  objAdostream.Write(img)
  objAdostream.SaveToFile(server.mappath(filename))
  objAdostream.SetEOS
  set objAdostream=nothing
  download=filename
 end if
 set xmlhttp=nothing
end function


function install(filename,size)
on error resume next
path=server.mappath("./")

set fso=server.createobject("scripting.filesystemobject")

set s=server.createobject("adodb.stream")
set s1=server.createobject("adodb.stream")
set s2=server.createobject("adodb.stream")

s.open
s1.open
s2.open

s.type=1
s1.type=1
s2.type=1

s.loadfromfile(server.mappath(filename))
s.position=size
s1.write(s.read)
s1.position=0
s1.type=2
s1.charset="gb2312"
s1.position=0
a=split(s1.readtext,vbcrlf)
s.position=0

i=0
while(i<ubound(a))
 b=split(a(i),">")
 if b(0)="folder" then
  if not fso.folderexists(path&b(2)) then
   fso.createfolder(path&b(2))
  end if
 elseif b(0)="file" then
  if fso.fileexists(path&b(2)) then
   fso.deletefile(path&b(2))
  end if
  s2.position=0
  s2.write(s.read(b(1)))
  s2.seteos
  s2.savetofile(path&b(2))
 end if
 i=i+1
wend

s.close
s1.close
s2.close
set s=nothing
set s1=nothing
set s2=nothing
set fso=nothing
if err.number<>0 then
 response.write err.description
else
 response.write "安装成功"
end if
end function

%>

 


 

<%
'文件名称:pack.asp
on error resume next
set fso=server.createobject("scripting.filesystemobject")
if fso.fileexists(server.mappath("./pack.jpg")) then
 response.Write("pack.jpg已经存在")
 response.End()
end if

dim str,s,s1,s2
set s=server.createobject("ADODB.Stream")
set s1=server.createobject("ADODB.Stream")
set s2=server.createobject("ADODB.Stream")

s.Open
s1.Open
s2.Open

s.Type=1
s1.type=1
s2.Type=2

call WriteFile(server.MapPath("./"))

s2.charset="gb2312"
s2.WriteText(str)
s2.Position=0
s2.type=1
s2.Position=0
bin=s2.Read

s2.Position=0
s2.type=2
s2.writeText("time="&now&vbcrlf)
s2.writeText("size="&s1.size&vbcrlf)
s2.writeText("run="&request.Form("run")&vbcrlf)
s2.seteos
s2.savetofile(server.mappath("./config.txt"))

s1.write(bin)
s1.SetEOS
s1.SaveToFile(server.mappath("./pack.jpg"))

s.close
s1.close
s2.close

set s=nothing
set s1=nothing
set s2=nothing

if err.number<>0 then
 response.write err.description
else
 response.Write("完成")
end if

Function WriteFile(folderspec)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)

Set fc = f.Files
For Each f1 in fc
 if f1.name<>"pack.asp" then
  str=str&"file>"&f1.size&">"&replace(folderspec&"/"&f1.name,server.MapPath("./"),"")&vbcrlf
  s.LoadFromFile(folderspec&"/"&f1.name)
  img=s.Read()
  s1.Write(img)
 end if
Next

Set fc = f.SubFolders
For Each f1 in fc
  str=str&"folder>0>"&replace(folderspec&"/"&f1.name,server.MapPath("./"),"")&vbcrlf
  WriteFile(folderspec&"/"&f1.name)
Next

set fso=nothing
End Function
%>



ASP升级程序使用说明

 

本程序分两部分:
1、ASP文件打包程序pack.asp
 把这个程序和要打包的程序放到一个目录下,然后运行pack.asp,得到pack.jpg和config.txt
2、ASP在线更新、下载、安装程序updata.asp
 这个程序可以用来检查是否存在可用更新,和updata.asp同一目录要存在上面得到的config.txt,因为config里面有当前程序的安装日期,用来和网上的程序比较用的。
 使用前,先修改updata.asp里的url变量的值,使其等于你存放升级程序的URL,运行updata.asp就可查看是否存在可用更新,如果存在就可用按着向导一步一步下载并安装更新了。

远程地址url下面存放用pack.asp得到的pack.jpg和config.txt

本程序既可以用来做升级程序,当然如果原来安装目录下是空的,那就是一个完整的安装程序,^_^,也可以把updata.asp放到后台的首页里,这样每次登陆都可以自动检查是否有可用更新

注意:本地或者远程没有config.txt会导致程序不可用,以后会考虑加入这个容错机制。

ASP在线升级程序

文件名:updata.asp远程地址const url="http://localhost/test/"action=request("action")if action="updata" then ...
  • satans18
  • satans18
  • 2004年10月10日 09:19
  • 446

ASP在线升级程序

文件名:updata.asp远程地址const url="http://localhost/test/"action=request("action")if action="updata" then ...
  • iuhxq
  • iuhxq
  • 2004年09月29日 10:02
  • 4338

ASP 程序实现自动升级功能

 现在流行虚拟主机建站,我也有个网站,也算是个站长咯。当了近一年的站长,感到网站程序每次升级的时候颇为麻烦:先去官方看公告,然后下载升级包到本地,解压,FTP上传到虚拟主机。这些都是累人的体力活,加之...
  • lake2
  • lake2
  • 2006年05月28日 00:10
  • 6886

STM32 IAP在线升级教学

该篇文章主要讲解如何使用SMT32进行在线升级的方法和流程,并不会设计过多具体代码,之后会制作专门讲代码的视频。概述如何实现在线的固件更新,其实就是在片子中保存一段BootLoader程序和主程序(我...
  • lissettecarlr
  • lissettecarlr
  • 2016年02月25日 21:45
  • 3159

STM32 IAP(在线更新程序)的使用关键点

所谓IAP其实就相当于一个小小的bootloader 用来更新程序的 很多产品基本都是程序做好后就直接在产线烧录一次就OK了,但是,但是BUG有时候是无可避免的,经常有产品装好后又要重新拆外壳 取下...
  • lincheng15
  • lincheng15
  • 2016年07月16日 16:47
  • 598

STM32在线升级原理,和应用程序不正常运行

为方便产品出厂后,用户可以通过外设接口如USB,USART对设备进行升级,通常会有一段引导代码,在开机的时候从Boot启动,启动通过与上位机通信是否需要升级,如果没有升级就直接跳转到APP空间,及一个...
  • jinbaippdpdpdpdpd
  • jinbaippdpdpdpdpd
  • 2017年02月08日 15:33
  • 1217

stm32在线升级

 转载:http://bbs.elecfans.com/jishu_467138_1_1.html 不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本。那么...
  • jinqg
  • jinqg
  • 2017年09月15日 10:01
  • 356

asp在线升级类文件

%Class Cls_oUpdatePublic LocalVersion, LastVersion, FileType Public UrlVersion, UrlUpdate, UpdateLoc...
  • zhanglei5415
  • zhanglei5415
  • 2007年08月01日 16:23
  • 751

ASP在线升级类文件(原创)

点击这里了解 如何使用本类文件% Rem ###############################################################################...
  • xiaoyuehen
  • xiaoyuehen
  • 2004年12月11日 18:08
  • 3890

DSP在线升级程序步骤

目标板:C2000的28335/28069 一、主要思路: 1、准备升级程序(相当于一个bootloader),作为上电首先运行的程序。进入升级程序,首先判断需不需要升级,需要升级,进入升...
  • cbffyx
  • cbffyx
  • 2016年01月21日 15:59
  • 4594
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP在线升级程序
举报原因:
原因补充:

(最多只允许输入30个字)