现在流行虚拟主机建站,我也有个网站,也算是个站长咯。当了近一年的站长,感到网站程序每次升级的时候颇为麻烦:先去官方看公告,然后下载升级包到本地,解压,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.xxx.com/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.xxx.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程序,也好让我等懒人乐得悠闲,哈哈。

ASP网站程序自动升级实现的方法相关推荐

  1. php网站本地调试工具,php本地调试工具-php/asp网站程序本地调试工具下载 v5.1--pc6下载站...

    一款用于php/asp网站程序本地调试的工具. 一款用于php/asp网站程序本地调试的工具.许多站长对编程不太熟悉,当自己的php/asp网站程序需要修改时,修改后的文件,本地电脑无法看到自己的修改 ...

  2. 重启java_让Java程序自动重启的实现方法(推荐)

    要让一个java程序自动重启还真不容易的,重启分两步,首先是结束程序,这个简单,只要运行System.exit()就可以了.然后是启动,这个就难了,这个时候程序都已经结束了,就像一个人死了就不可能再自 ...

  3. java程序自动重启_让Java程序自动重启的实现方法(推荐)

    要让一个java程序自动重启还真不容易的,重启分两步,首先是结束程序,这个简单,只要运行System.exit()就可以了.然后是启动,这个就难了,这个时候程序都已经结束了,就像一个人死了就不可能再自 ...

  4. linux asp可以运行吗,宝塔linux面板可以搭建运行asp网站程序吗

    宝塔linux面板可以搭建运行asp网站程序吗?宝塔linux面板怎么支持asp?下面由宝塔教程栏目为大家详细介绍! 首先登录到宝塔 Linux 面板 >> 软件管理 >> 运 ...

  5. ARM-Linux应用程序自动升级以及自动回滚的实现

    1. 研究背景 现今,许多基于arm-linux平台开发的应用程序开发都具备了物理的网卡这样的外围设备,这也是为通过网络升级应用程序提供了诸多便利,网络的便捷,快速,稳定等诸多特点.今天,我们约定应用 ...

  6. 页面自动跳转php,网站页面自动跳转实现方法PHP、JSP等

    网站页面自动跳转实现方法PHP.JSP等 自动转向,也叫自动重定向.自动跳转,指当访问用户登陆到某网站时,自动将用户转向其它网页地址的一种技术.转向的网页地址可以是网站内的其它网页,也可以是其它网站. ...

  7. 解决win2003下IIS中建立ASP网站出现500内部错误的方法(BUG)

    今天尝试在win2003系统下建立ASP网站,结果在访问时出现了"500-内部错误". 经过多番上网查找解决方法和大量尝试,总算解决了这一问题. IIS500错误,是因为微软的一个 ...

  8. 谷歌浏览器自动升级关闭小方法

    很多开发者和测试人员发现,使用谷歌浏览器会自动升级新的版本,这样可能影响效率.可以试下将自动升级关闭, 找到谷歌的安装路径,查找update 文件夹或者包含的update.exe 的文件删除就可以了.

  9. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)

    前言 C# 用IP地址(123.125.114.144)查询位置(北京市百度公司)的东西,非常好用也非常方便,可手动升级刷新IP库,一次编码永久收益,可支持winform.asp.net等程序. 本文 ...

最新文章

  1. Android Dialog 关闭的时候标题栏闪烁一下的处理方法
  2. 新手探索NLP(十五)——终章
  3. GPass:GNOME 暗码治理器
  4. 2017 年热门编程语言排行榜,你的语言上榜没?
  5. java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
  6. Docker与Kubernetes,是敌是友?
  7. JVM笔记(JVM内存+垃圾回收器)详解
  8. 优先队列——斐波那契堆(without source code)
  9. python递归必须要有_python如何递归生成树?
  10. linux 串口中断_1600字干货 | 大佬讲Linux启动流程(内含福利)
  11. mybatis存在就不插入_mybatis只能进行查找,不能进行删除,插入,更新解决方案...
  12. oracle-关于分组函数的小细节
  13. Communicator 2007的一些设置
  14. 头脑风暴 软件_头脑风暴和思维导图的最佳网站和软件
  15. 阿里语音识别sdk_demo--发送音频数据帧的过程
  16. ArduinoUNO实战-第四章-按键控制led
  17. Python 三大神器:pip,virtualenv(virtualenvwrapper),fabric
  18. Nginx代理静态图片
  19. GraphQL:你的容颜,十万光年
  20. 计算机取代人脑的英语作文,关于电脑和人脑差别的英语作文

热门文章

  1. 有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?
  2. 局部图像特征描述概述
  3. 2015年部分互联网公司笔试综合题及答案
  4. Day 27: Restify —— 在Node.js中构建正确的REST Web服务
  5. 「镁客早报」第九城市与法拉第未来成立合资公司,出资6亿美元;华为获得韩国运营商5G订单,占比95%...
  6. Onew——全球领先的区块链数字资产服务商
  7. iView 近期的更新,以及那些“不为人知”的故事
  8. golang Reflect包
  9. SoapUI工具中的用户名和密码如何用net代码实现传入
  10. iOS app性能优化的那些事