ASP 程式實現自動升級功能

來源:互聯網
上載者:User

現在流行虛擬機器主機建站,我也有個網站,也算是個站長咯。當了近一年的站長,感到網站程式每次升級的時候頗為麻煩:先去官方看公告,然後下載升級包到本地,解壓,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程式,也好讓我等懶人樂得悠閑,哈哈。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.