国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

ASP 程序實現自動升級功能

2020-07-27 13:15:40
字體:
來源:轉載
供稿:網友
現在流行虛擬主機建站,我也有個網站,也算是個站長咯。當了近一年的站長,感到網站程序每次升級的時候頗為麻煩:先去官方看公告,然后下載升級包到本地,解壓,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程序,也好讓我等懶人樂得悠閑,哈哈。
上一篇:Asp實現假靜態

下一篇:ASP輔助代碼

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻栗坡县| 泗阳县| 商丘市| 浦北县| 德安县| 安西县| 华坪县| 江城| 泸定县| 明光市| 镇坪县| 张家口市| 邳州市| 卫辉市| 阜新市| 临沭县| 碌曲县| 襄垣县| 红桥区| 建水县| 明水县| 苏尼特右旗| 汽车| 临沂市| 集贤县| 揭东县| 绍兴县| 通州市| 云梦县| 麻阳| 乡宁县| 达日县| 武强县| 大同市| 融水| 天长市| 辰溪县| 寻甸| 定襄县| 慈利县| 宜君县|