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程序,也好让我等懒人乐得悠闲,哈哈。

(0)

相关推荐

  • ASP 程序实现自动升级功能

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

  • Electron实现应用打包、自动升级过程解析

    上次成功搭建了vue + electron的helloworld程序,这次将electron应用打包及自动升级的流程梳理了一下. 1. 应用打包 使用electron builder打包只需要在vue.config.js中配置即可,这里需要注意的是,默认情况下electron builder打包出来的安装程序是不能修改安装目录的,需要allowToChangeInstallationDirectory这个配置设置为true. // see https://cli.vuejs.org/config

  • Delphi 实现软件自动升级的功能

    Delphi 实现软件自动升级的功能 原理简单,在FTP上维护一个Update.ini文件,里面记录着要更新文件的版本号,本地也有一个Update.ini文件,每次启动更新程序时,先从FTP上下载Update.ini文件到本地名字为Update_new.ini,然后比较这两个文件,如果新的版本号大于旧的,或者新的文件在就ini中没有,这些就表示要更新的文件,然后逐一下载. 本程序名字为AutoUpdate,你生成这个exe,然后和主程序一起打包,创建桌面快捷方式时,指向AutoUpdate,而不

  • ASP.NET输入文本框自动提示功能

    在ASP.NET Web开发中会经常用到自动提示功能,比如百度搜索.我们只要输入相应的关键字,就可以自动得到相似搜索关键字的提示,方便我们快速的输入关键字进行查询. 那么在ASP.NET中,如果我们需要做个类似的效果,该如何做到呢? 很简单,我们只要借助于一个JQuery强大的插件JQuery AutoComplete来完成这个效果就可以了.这个插件的官方地址为:JQuery AutoComplete,里面也有示例代码. 下面我们将以一个身份证号自动查询为例,来看看JQuery AutoComp

  • Android程序自动更新功能模块的实现方法【附完整demo源码下载】

    本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更新模块检测服务器上存放的版本号跟当前程序的版本号如果大于当前版本号,弹出更新对话框,如果用户选择更新,则显示当前更新状态,然后替换当前程序. 程序调用版本更新检测: private UpdateManager updateMan; private ProgressDialog updateProgr

  • 使用python实现微信小程序自动签到功能

    功能描述目标 完成多账号微信小程序每天自动签到 输出 签到成功则向微信群发送签到成功的信息 否则提示用户签到失败,需手动签到 包管理 requests itchat time threading 程序的结构设计步骤1 获取要发送的json数据:地址 步骤2 向服务器发送请求 步骤3 根据服服务器响应判断签到是否完成 步骤4 微信交互 代码实现使用findler抓包工具查看请求类型 https://reserve.25team.com/wxappv1/yi/index?version=13 可以看

  • C#关联自定义文件类型到应用程序并实现自动导入功能

    这几天开发遇到一个需求: 将自定义文件后缀添加默认图标双击 自定义的文件后缀可以自动关联到指定的应用程序并自动打开 上述第一.二两点其实是一个需求,本质是和注册表有关的操作,在注册表中写入默认图标.默认文件后缀.指定打开文件,一旦明白这个思路代码就非常清晰了. 代码中我们写入了两个注册表. 第一个结构如下图所示,其中DefaultIcon定义的是默认图标地址,Command中存放的是指定识别的软件的运行exe路径. 第二个注册表如下图所示,将默认文件后缀和第一个注册表进行关联,这样就可以进行识别

  • 用InstallShield打包ASP程序的脚本

    #include "ifx.h" //不能移动 ////////////////////////////////////////////////////////////////////////////// // 用InstallShield 进行 ASP 软件的打包和自动安装  // 原创作者: 贾俊 (Jaron) // 网址: http://www.jiangdu.net // 邮件: jaron@jdinfo.net // 首次发表于网易,ChinaASP,ASPHouse //

  • 飞云写的防CC攻击的ASP程序插件 打包下载

    <% '================== '飞云防CC攻击ASP程序插件 '建议除必须修改的参数内容外不要修改其他内容 '如果需要反馈错误或提交意见,可以到落伍(IM286.COM)联系 "正版飞云" '================== dim FYCC_19,FYCC_20,FYCC_21,FYCC_05 dim FYCC_18 FYCC_05="" 'CCLog.txt存放的路径文件夹!需要手动创建!建议留空 '如果输入,请在前面加上符号"

  • 飞云防CC攻击ASP程序代码插件

    <% '================== '飞云防CC攻击ASP程序插件 '建议除必须修改的参数内容外不要修改其他内容 '如果需要反馈错误或提交意见,可以到落伍(IM286.COM)联系 "正版飞云" '================== dim FYCC_19,FYCC_20,FYCC_21,FYCC_05 dim FYCC_18 FYCC_05="" 'CCLog.txt存放的路径文件夹!需要手动创建!建议留空 '如果输入,请在前面加上符号"

随机推荐