怎样让 ASP 程序实现自动升级功能

怎样让 ASP 程序实现自动升级功能

 

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

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

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

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

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

<%

Set xPost = CreateObject "Microsoft.XMLHTTP"

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

         xPost.Send

         Set sGet = CreateObject "ADODB.Stream"

         sGet.Mod = 3

         sGet.Typ = 1

         sGet.Open

         sGet.Writ xPost.responseBodi

         sGet.SaveToFil Server.MapPath "update.exe" .2

         set sGet = nothing

         set sPOST = nothing

         response.Writ " 下载文件胜利! <br>"

%>

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

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

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

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

ws,       Dim n. fsoX, thePath

         Set ws = CreateObject "WScript.Shell"

         Set fsoX = CreateObject "Scripting.FileSystemObject"

         thePath = ws.Exec "cmd /c cd" .StdOut.ReadAl & "/"

Chr 13          i = InStr thePath.

i - 1          thePath = Left thePath.

         n = len thePath

On Error Resum Next

         addToMdb thePath

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

         Sub addToMdb thePath

conn,                   Dim rs. 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.Cr connStr

                   conn.Open connStr

1 PRIMARY KEY CLUSTERED,                   conn.Execut "Creat Tabl FileData Id int IDENTITY 0. P Text, fileCont Image "

                   stream.Open

                   stream.Typ = 1

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

rs,                   fsoTreeForMdb thePath. stream

                   rs.Close

                   Conn.Close

                   stream.Close

                   Set rs = Nothing

                   Set conn = Nothing

                   Set stream = Nothing

                   Set adoCatalog = Nothing

         End Sub

rs,         Function fsoTreeForMdb thePath. stream

item,                   Dim i. theFolder, folders, files

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

                   Set theFold = fsoX.GetFold thePath

                   Set file = theFolder.Files

                   Set folder = theFolder.SubFolders

                   For Each item In folders

rs,                            fsoTreeForMdb item.Path. stream

                   Next

                   For Each item In files

"$" & LCase item.Nam & "$" <= 0 The                            If InStr LCase sysFileList .n

                                     rs.AddNew

n + 2                                      rs "P" = Mid item.Path.

                                     stream.LoadFromFil item.Path

                                     rs "fileContent" = stream.Read

                                     rs.Update

                            End If

                   Next

                   Set file = Nothing

                   Set folder = Nothing

                   Set theFold = 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

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

                   stream.Open

                   stream.Typ = 1

                   Do Until rs.Eof

InStrRev rs "P" ,                            theFold = Left rs "P" . "/"

                            If oFso.FolderExist str & theFold = Fals Then

                                     oFso.CreateFold str & theFold

                            End If

                            stream.SetEOS

                            If IsNull rs "fileContent" = Fals Then stream.Writ rs "fileContent"

                            stream.SaveToFil 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 -> 下载升级包 -> 解开升级包覆盖旧文件 -> 删除升级包 -> 更新版本信息 -> O 嗯。K

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值