打印

ASP升级程序使用说明

本主题由 上岸洗澡的鱼 于 2008-10-9 15:13 移动

ASP升级程序使用说明

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会导致程序不可用,以后会考虑加入这个容错机制。

说明:这个程序用起来很简单,仔细看一定可以明白的。多实验一下。
1。打包是什么意思?
答:就是把所有代码都放到一个文件里,这样可以传输,如果是ASP文件不打包则无法传输。
2。config.txt 文件是放到哪里的?
答:本地一份,远程一份,本地的用来识别本地程序的更新时间,远程的用来确认更新程序的更新时间。本地的放到和updata.asp一个目录,远程的放到pack.jpg一个目录
3。先运行 pack.asp吗?
答:pack.asp是给代码打包的程序,可以把你要升级的部分代码打包成pack.jpg,方便传输。
4。pack.jpg不是图象文件吗?
答:不是。你可以用记事本打开查看。
5。下一步怎么实现更新呢?
答:把updata.asp放到本地。运行就可以了。你也可以对updata.asp稍加修改。以适应不同需要。
6。updata.asp需要跟其他文件放到同一目录吗 ?
答:放到你要更新的程序的目录里。比如你有个BBS目录,则可以把updata.asp防到bbs目录里。这样它就可以对BBS目录里的所有代码(包括数据库,图片等所有文件进行覆盖,所以操作前最好备纷一下)进行更新。
7。config.txt是什么用?
答:晕倒,是用来记录程序是什么时间写成的。也就是确定程序版本用。(另外还记录程序大小。)
8。功能都明白了,可是不行啊?
答:那只能多次实验了,相信一定可以成功的。

////////////////////////
<%
'文件名: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
%>
www.19rooms.com依旧空间

TOP

其实安装程序也可以这么写
每个人都曾是天使,当他喜欢一个人时,他便折断翅膀坠落人间,变成凡人,所以不要辜负爱你的人,因为他已经没有翅膀飞回原来的天堂~~~

TOP

 

关于我们 | 管理团队 | 友情链接 | 广告联系 | 网站地图 |  联系我们 - 界面风格

Copyright © 2007 - 2009 依旧空间- 官方网站! All Rights Reserved.
浙ICP备07018123号