ASP 程序实现自动升级功能

现在流行虚拟主机建站,我也有个网站,也算是个站长咯。当了近一年的站长,感到网站程序每次升级的时候颇为麻烦:先去官方看公告,然后下载升级包到本地,解压,FTP上传到虚拟主机。这些都是累人的体力活,加之本人又懒得很,所以异想天开的觉得要是程序能够自动升级就好了。所以就想了想,写了本文,希望对WEB程序开发者有帮助。这里只针对ASP,因为我只会ASP :-(

先看看传统的win32程序的升级过程(比如杀毒软件),它是依靠软件的升级程序通过网络连接到服务器分析并下载升级文件到本地。

WEB程序有点不一样,因为它是运行于WEB服务器。它最终是要把升级服务器上的文件覆盖到WEB服务器,站长的电脑只是中转。如果直接把升级服务器上的文件Copy到WEB服务器(而不通过站长中转)那就实现了自动升级。

好在系统自带了一个 Microsoft.XMLHTTP 组件用于访问WEB,在ASP中可以调用它来实现连接升级服务器下载升级文件。

以下代码是利用 Microsoft.XMLHTTP下载文件的例子:

<%

Set xPost = CreateObject("Microsoft.XMLHTTP")

xPost.Open "GET","http://www.0x54.org/test.exe",False

xPost.Send()

Set sGet = CreateObject("ADODB.Stream")

sGet.Mode = 3

sGet.Type = 1

sGet.Open()

sGet.Write(xPost.responseBody)

sGet.SaveToFile Server.MapPath("update.exe"),2

set sGet = nothing

set sPOST = nothing

response.Write("下载文件成功!<br>")

%>

上面代码就是把 http://www.0x54.org/test.exe保存到WEB服务器当前目录,至于Microsoft.XMLHTTP 的更多用法还是看看MSDN吧。

如果文件比较多,就会多次调用Microsoft.XMLHTTP连接网络,就可能出现某次连接失败部分文件未能更新的情况,为了避免这种情况,最好是把所有文件打包为一个文件一次下载到WEB后再解包。

呵呵,这里说的打包可不是RAR或者ZIP包,而是我们自己定义。比如把所有文件拼接为一个,然后再根据特殊的记号分开。现在没这么麻烦咯,因为有个现成的办法,我们使用拿来主义就是:把所有文件(二进制形式)及其路径信息放入Access数据库。

下面这个vbs文件(来自海洋顶端2006Plus)就是打包当前目录的所有文件的:

Dim n, ws, fsoX, thePath

Set ws = CreateObject("WScript.Shell")

Set fsoX = CreateObject("Scripting.FileSystemObject")

thePath = ws.Exec("cmd /c cd").StdOut.ReadAll() & "\"

i = InStr(thePath, Chr(13))

thePath = Left(thePath, i - 1)

n = len(thePath)

On Error Resume Next

addToMdb(thePath)

Wscript.Echo "当前目录已经打包完毕,根目录为当前目录"

Sub addToMdb(thePath)

Dim rs, conn, stream, connStr

Set rs = CreateObject("ADODB.RecordSet")

Set stream = CreateObject("ADODB.Stream")

Set conn = CreateObject("ADODB.Connection")

Set adoCatalog = CreateObject("ADOX.Catalog")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Packet.mdb"

adoCatalog.Create connStr

conn.Open connStr

conn.Execute("Create Table FileData(Id int IDENTITY(0,1) PRIMARY KEY CLUSTERED, P Text, fileContent Image)")

stream.Open

stream.Type = 1

rs.Open "FileData", conn, 3, 3

fsoTreeForMdb thePath, rs, stream

rs.Close

Conn.Close

stream.Close

Set rs = Nothing

Set conn = Nothing

Set stream = Nothing

Set adoCatalog = Nothing

End Sub

Function fsoTreeForMdb(thePath, rs, stream)

Dim i, item, theFolder, folders, files

sysFileList = "$" & WScript.ScriptName & "$Packet.mdb$Packet.ldb$"

Set theFolder = fsoX.GetFolder(thePath)

Set files = theFolder.Files

Set folders = theFolder.SubFolders

For Each item In folders

fsoTreeForMdb item.Path, rs, stream

Next

For Each item In files

If InStr(LCase(sysFileList), "$" & LCase(item.Name) & "$") <= 0 Then

rs.AddNew

rs("P") = Mid(item.Path, n + 2)

stream.LoadFromFile(item.Path)

rs("fileContent") = stream.Read()

rs.Update

End If

Next

Set files = Nothing

Set folders = Nothing

Set theFolder = Nothing

End Function

以下是解包的ASP文件:

<%

Sub UnPack()

str = Server.MapPath(".") & "\"

Set rs = CreateObject("ADODB.RecordSet")

Set stream = CreateObject("ADODB.Stream")

Set conn = CreateObject("ADODB.Connection")

Set oFso = CreateObject("Scripting.FileSystemObject")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("update.mdb") 

conn.Open connStr

rs.Open "FileData", conn, 1, 1

stream.Open

stream.Type = 1

Do Until rs.Eof

theFolder = Left(rs("P"), InStrRev(rs("P"), "\"))

If oFso.FolderExists(str & theFolder) = False Then

oFso.CreateFolder(str & theFolder)

End If

stream.SetEOS()

If IsNull(rs("fileContent")) = False Then stream.Write rs("fileContent")

stream.SaveToFile str & rs("P"), 2

rs.MoveNext

Loop

rs.Close

conn.Close

stream.Close

Set ws = Nothing

Set rs = Nothing

Set stream = Nothing

Set conn = Nothing

Set oFso = Nothing

End Sub

%>

嗯,有了以上代码就不难开发出自己的ASP升级程序了,流程无外乎这样:判断是否需要升级(Y) -> 下载升级包 -> 解开升级包覆盖旧文件 -> 删除升级包 -> 更新版本信息 -> OK

写到这里差不多该结束了,还有些诸如版本判断之类的细节就略过略过咯。

希望早日用到自动升级的各类WEB程序,也好让我等懒人乐得悠闲,哈哈。

时间: 2024-10-23 01:27:27

ASP 程序实现自动升级功能的相关文章

ASP 程序实现自动升级功能_小偷/采集

现在流行虚拟主机建站,我也有个网站,也算是个站长咯.当了近一年的站长,感到网站程序每次升级的时候颇为麻烦:先去官方看公告,然后下载升级包到本地,解压,FTP上传到虚拟主机.这些都是累人的体力活,加之本人又懒得很,所以异想天开的觉得要是程序能够自动升级就好了.所以就想了想,写了本文,希望对WEB程序开发者有帮助.这里只针对ASP,因为我只会ASP :-( 先看看传统的win32程序的升级过程(比如杀毒软件),它是依靠软件的升级程序通过网络连接到服务器分析并下载升级文件到本地. WEB程序有点不一样

ASP 程序实现自动升级功能_应用技巧

现在流行虚拟主机建站,我也有个网站,也算是个站长咯.当了近一年的站长,感到网站程序每次升级的时候颇为麻烦:先去官方看公告,然后下载升级包到本地,解压,FTP上传到虚拟主机.这些都是累人的体力活,加之本人又懒得很,所以异想天开的觉得要是程序能够自动升级就好了.所以就想了想,写了本文,希望对WEB程序开发者有帮助.这里只针对ASP,因为我只会ASP :-( 先看看传统的win32程序的升级过程(比如杀毒软件),它是依靠软件的升级程序通过网络连接到服务器分析并下载升级文件到本地. WEB程序有点不一样

NSIS:应用软件自动升级功能的探索与实践

原文 NSIS:应用软件自动升级功能的探索与实践 记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能 (详细http://www.flighty.cn/html/soft/20110106_108.html) 但那个QUpdater毕竟不是自己写的,用起来不怎么放心,关键是其开发者对程序进行了各种限制. 现在,轻狂用NSIS来实现软件自动升级功能,有兴趣的同学可以共同探讨.   本文为原创文章,转载请注明出处和链接!(鄙视一下COPY帝--)   实现过程: 1.搭建一个HTTP环境,放

java的web程序的自动升级

问题描述 我的web程序已经部署在服务器上,要实现这样一个问题类似自动升级:后台程序某些类作了修改,不重新部署war包的情况下怎么升级程序?是不是要用监听?急急急! 解决方案 解决方案二:估计不行把..如果你改变了JAVA程序需要重新启动服务器的.解决方案三:如果是只改了java文件,贴个class上去,也要重启下服务器,除非是网页文件,那个jsp的那些就不要,其他的好像还是要的,如果你的项目都是jsp生成的,那估计改改jsp是不需要重启.解决方案四:tomcat可以设置为自动加载,reload

关闭谷歌Chrome浏览器自动升级功能

  Chrome浏览器的自动更新虽然方便,但也不是所有的用户都喜欢.比如使用 dev 分支的用户被自动升级到了一个启动后不停崩溃的版本--追求稳定性的用户,不妨试用本文介绍的办法,关掉Chrome浏览器的自动更新. Windows 操作系统 - 个人用户 打开注册表编辑器(开始-运行-regedit),找到如下键值 HKEY_LOCAL_MACHINESOFTWAREPoliciesGoogleUpdate 将其中 DisableAutoUpdateChecksCheckbox 的值改成1就可以

浅谈ASP程序实现自动采集程序及入库

采集|程序 <%'声明取得目标信息的函数,通过XML组件进行实现.Function GetURL(url) Set Retrieval = CreateObject("Microsoft.XMLHTTP") With Retrieval .Open "GET", url, False.Send GetURL = bytes2bstr(.responsebody)'对取得信息进行验证,如果信息长度小于100则说明截取失败if len(.responsebody)

关于ASP程序实现自动采集程序及入库

<%'声明取得目标信息的函数,通过XML组件进行实现.Function GetURL(url) Set Retrieval = CreateObject("Microsoft.XMLHTTP") With Retrieval .Open "GET", url, False.Send GetURL = bytes2bstr(.responsebody)'对取得信息进行验证,如果信息长度小于100则说明截取失败if len(.responsebody)<10

在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)

services|web winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了这一缺陷,有较好的参考价值. 一.升级的好处. 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序的可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素,也是那些B/S

CS结构软件自动升级实现(一)

前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服务器上,工具使用用户运行工具时就会连接到自动升级服务器,检查是否有版本更新,如果有则完成更新后再运行最新版本,否则就运行当前工具版本. 为了使这个自动升级模块具有通用性,我将其做成可以单独运行的程序,而并非集成到工具中,这样则可以为各类软件提供自动升级的功能.自动升级模块采用SOCKET方式实现升级