ASPオンラインアップグレードクラス
著者:Eve Cole
更新時間:2009-06-26 18:09:15
<%
レム ############################################# ## ##################################
Rem ## オンライン アップグレード クラス ステートメント
クラスCls_oUpdate
レム ############################################# ## ##############################
Rem ## 説明: ASP オンライン アップグレード クラス
レム ## バージョン: 1.0.0
レム## 著者:シャオ・ユエヘン
レム ## MSN: xiaoyuehen(at)msn.com
Rem ## (at) を @ に置き換えてください
Rem ## 著作権: 共有されているため、著作権はありません。ただし、オンラインでの配布に限定され、従来のメディアでは使用できません。
Rem ## この指示を守っていただければ、さらに感謝いたします。
Rem ## コードの最適化とそれに関連する改善点があれば、忘れずに教えてください。ありがとうございました。
レム ############################################# ## ##############################
パブリック LocalVersion、LastVersion、FileType
パブリック URLVersion、UrlUpdate、UpdateLocalPath、情報
パブリック URL履歴
プライベート sstrVersionList、sarrVersionList、sintLocalVersion、sstrLocalVersion
プライベート sstrLogContent、sstrHistoryContent、sstrUrlUpdate、sstrUrlLocal
レム ############################################# ## ##############################
プライベートサブクラス_Initialize()
Rem ## http:// で始まるバージョン情報の完全な URL
Rem ## 例: http://localhost/software/Version.htm
URLバージョン = ""
Rem ## アップグレード URL (http:// で始まり / で終わる)
Rem ## 例: http://localhost/software/
URL更新 = ""
Rem ## ローカル更新ディレクトリ。/ で始まり、/ で始まり、他のディレクトリへの書き込みを禁止します。
Rem ## プログラムはディレクトリが存在するかどうかを確認し、存在しない場合は自動的に作成されます。
UpdateLocalPath = "/"
Rem ## 生成されたソフトウェア履歴ファイル
URLHistory = "history.htm"
Rem ## 最後のプロンプトメッセージ
情報 = ""
レム ## 現在のバージョン
LocalVersion = "1.0.0"
レム ## 最新バージョン
LastVersion = "1.0.0"
Rem ## 各バージョン情報ファイルのサフィックス名
ファイルタイプ = ".asp"
エンドサブ
レム ############################################# ## ##############################
レム ############################################# ## ##############################
プライベートサブクラス_Terminate()
エンドサブ
レム ############################################# ## ##############################
Rem ## アップグレード アクションを実行する
レム ############################################# ## ##############################
パブリック関数 doUpdate()
doUpdate = False
URLVersion = トリム(URLVersion)
URLUpdate = トリム(URLUpdate)
Rem ## アップグレード URL 検出
If (Left(UrlVersion, 7) <> " http://"<IMG SRC="smile/05.gif"> Or (Left(UrlUpdate, 7) <> " http://"<IMG SRC="smile /05.gif">それでは
Info = 「バージョン検出 URL が空です。アップグレード URL が空であるか、形式が間違っています (#1)」
終了機能
終了の場合
正しい場合(UrlUpdate, 1) <> "/" then
sstrUrlUpdate = URLUpdate & "/"
それ以外
sstrUrlUpdate = URLアップデート
終了の場合
正しい場合 (UpdateLocalPath, 1) <> "/" then
sstrUrlLocal = UpdateLocalPath & "/"
それ以外
sstrUrlLocal = UpdateLocalPath
終了の場合
Rem ## 現在のバージョン情報(数値)
sstrLocalVersion = LocalVersion
sintLocalVersion = Replace(sstrLocalVersion, ".", ""<IMG SRC="smile/05.gif">
sintLocalVersion = toNum(sintLocalVersion, 0)
Rem ## バージョン検出(バージョン情報の初期化と比較)
If IsLastVersion then Exit 関数
レム ## アップグレードを開始してください
doUpdate = NowUpdate()
LastVersion = sstrLocalVersion
終了機能
レム ############################################# ## ##############################
Rem ## 最新バージョンかどうかを確認してください
レム ############################################# ## ##############################
プライベート関数 IsLastVersion()
Rem ## バージョン情報の初期化(sarrVersionList配列の初期化)
if iniVersionList then
Rem ## 成功した場合は、バージョンを比較します
ディム・アイ
IsLastVersion = True
i = 0 から UBound(sarrVersionList) まで
sarrVersionList(i) > sintLocalVersion の場合
Rem ## 最新バージョンがある場合は、ループを終了します
IsLastVersion = False
Info = 「すでに最新バージョンです!」
出口
終了の場合
次
それ以外
Rem ## それ以外の場合はエラーメッセージを返します
IsLastVersion = True
Info = "バージョン情報の取得中にエラーが発生しました!(#2)"
終了の場合
終了機能
レム ############################################# ## ##############################
Rem ## 最新バージョンかどうかを確認してください
レム ############################################# ## ##############################
プライベート関数 iniVersionList()
iniVersionList = False
ディム strVersion
strVersion = getVersionList()
Rem ## 戻り値が空の場合、初期化は失敗します。
strVersion = "" の場合
情報 = 「エラー....」
終了機能
終了の場合
sstrVersionList = Replace(strVersion, " ", ""<IMG SRC="smile/05.gif">
sarrVersionList = Split(sstrVersionList, vbCrLf)
iniVersionList = True
終了機能
レム ############################################# ## ##############################
Rem ## 最新バージョンかどうかを確認してください
レム ############################################# ## ##############################
プライベート関数 getVersionList()
getVersionList = GetContent(URLVersion)
終了機能
レム ############################################# ## ##############################
Rem ## アップデートを開始します
レム ############################################# ## ##############################
プライベート関数 NowUpdate()
ディム・アイ
i = UBound(sarrVersionList) から 0 ステップ -1 の場合
doUpdateVersion(sarrVersionList(i)) を呼び出す
次
Info = "アップグレードが完了しました。<a href=""" & sstrUrlLocal & UrlHistory & """>表示</a>"
終了機能
レム ############################################# ## ##############################
Rem ## 更新されたバージョンの内容
レム ############################################# ## ##############################
プライベート関数 doUpdateVersion(strVer)
doUpdateVersion = False
ディム整数
intVer = toNum(Replace(strVer, ".", ""<IMG SRC="smile/05.gif">, 0)
Rem ## 更新されたバージョンが現在のバージョンより小さい場合は、更新を終了してください
intVer <= sintLocalVersion の場合
終了機能
終了の場合
Dim strFileListContent、arrFileList、strUrlUpdate
strUrlUpdate = sstrUrlUpdate & intVer & FileType
strFileListContent = GetContent(strUrlUpdate)
strFileListContent = "" の場合
終了機能
終了の場合
Rem ## 現在のバージョン番号を更新してください
sintLocalVersion = intVer
sstrLocalVersion = strVer
薄暗くて、arrTmp
Rem ## アップデートファイルリストの取得
arrFileList = Split(strFileListContent, vbCrLf)
Rem ## 更新ログ
sstrLogContent = ""
sstrLogContent = sstrLogContent & strVer & ":" & vbCrLf
Rem ## アップデートを開始します
i = 0 の場合、UBound(arrFileList)
Rem ## 更新形式: バージョン番号/ファイル.htm|宛先ファイル
arrTmp = Split(arrFileList(i), "|"<IMG SRC="smile/05.gif">
sstrLogContent = sstrLogContent & vbTab & arrTmp(1)
doUpdateFile(intVer & "/" & arrTmp(0), arrTmp(1)) を呼び出す
次
Rem ## ログ ファイルに書き込む
sstrLogContent = sstrLogContent & Now() & vbCrLf
response.Write("<pre>" & sstrLogContent & "</pre>"<IMG SRC="smile/05.gif">
Call sDoCreateFile(Server.MapPath(sstrUrlLocal & "Log" & intVer & ".htm"<IMG SRC="smile/05.gif">, _ "<pre>" & sstrLogContent & "</pre>"<IMG SRC ="笑顔/05.gif">
Call sDoAppendFile(Server.MapPath(sstrUrlLocal & UrlHistory), "<pre>" & _ strVer & "_______" & Now() & "</pre>" & vbCrLf)
終了機能
レム ############################################# ## ##############################
Rem ## 更新ファイル
レム ############################################# ## ##############################
プライベート関数 doUpdateFile(strSourceFile, strTargetFile)
Dim strContent
strContent = GetContent(sstrUrlUpdate & strSourceFile)
Rem ## 更新してログに書き込みます
If sDoCreateFile(Server.MapPath(sstrUrlLocal & strTargetFile), strContent) then
sstrLogContent = sstrLogContent & "成功" & vbCrLf
それ以外
sstrLogContent = sstrLogContent & "失敗" & vbCrLf
終了の場合
終了機能
レム ############################################# ## ##############################
Rem ## コンテンツをリモートで取得する
レム ############################################# ## ##############################
プライベート関数 GetContent(strUrl)
GetContent = ""
Dim oXhttp、strContent
Set oXhttp = Server.CreateObject("Microsoft.XMLHTTP"<IMG SRC="smile/05.gif">
'エラー時は次へ再開
oXhttp を使用
.Open "GET"、strUrl、False、""、""
。送信
If .readystate <> 4 then 関数を終了
strContent = .Responsebody
strContent = sBytesToBstr(strContent)
で終わる
oXhttp = なしを設定します
Err.Number <> 0 の場合、次に
応答.書き込み(エラー説明)
エラークリア
終了機能
終了の場合
GetContent = strContent
終了機能
レム ############################################# ## ##############################
レム ############################################# ## ##############################
Rem ## エンコーディング変換バイナリ => 文字列
プライベート関数 sBytesToBstr(vIn)
dimobjStream
set objStream = Server.CreateObject("adodb.stream"<IMG SRC="smile/05.gif">
objStream.Type = 1
objStream.Mode = 3
objStream.Open
objStream.Write vIn
objStream.Position = 0
objStream.Type = 2
objStream.Charset = "GB2312"
sBytesToBstr = objStream.ReadText
objStream.Close
objStream = 何も設定しない
終了機能
レム ############################################# ## ##############################
レム ############################################# ## ##############################
Rem ## エンコーディング変換バイナリ => 文字列
プライベート関数 sDoCreateFile(strFileName, ByRef strContent)
sDoCreateFile = False
ディムストラパス
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## パスとファイル名の有効性を確認してください
If Not(CreateDir(strPath)) then Exit 関数
'そうでない場合(CheckFileName(strFileName)) then 関数を終了
'response.Write(strFileName)
Const ForReading = 1、ForWriting = 2、ForAppending = 8
薄暗い fso、f
Set fso = CreateObject("Scripting.FileSystemObject"<IMG SRC="smile/05.gif">
Set f = fso.OpenTextFile(strFileName, ForWriting, True)
f.strContentの書き込み
f.閉じる
fso = 何も設定しない
f = 何も設定しない
sDoCreateFile = True
終了機能
レム ############################################# ## ##############################
レム ############################################# ## ##############################
Rem ## エンコード変換バイナリ => 文字列
プライベート関数 sDoAppendFile(strFileName, ByRef strContent)
sDoAppendFile = False
ディムストラパス
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## パスとファイル名の有効性を確認してください
If Not(CreateDir(strPath)) then Exit 関数
'そうでない場合(CheckFileName(strFileName)) then 関数を終了
'response.Write(strFileName)
Const ForReading = 1、ForWriting = 2、ForAppending = 8
薄暗い fso、f
Set fso = CreateObject("Scripting.FileSystemObject"<IMG SRC="smile/05.gif">
Set f = fso.OpenTextFile(strFileName, ForAppending, True)
f.strContentの書き込み
f.閉じる
fso = 何も設定しない
f = 何も設定しない
sDoAppendFile = True
終了機能
レム ############################################# ## ##############################
Rem ## ディレクトリを作成するプログラムです。ディレクトリが複数ある場合は、1 つずつ作成します。
レム ############################################# ## ##############################
プライベート関数 CreateDir(ByVal strLocalPath)
Dim i、strPath、objFolder、tmpPath、tmptPath
Dim arrPathList、intLevel
'エラー時は次へ再開
strPath = Replace(strLocalPath, "", "/"<IMG SRC="smile/05.gif">
Set objFolder = server.CreateObject("Scripting.FileSystemObject"<IMG SRC="smile/05.gif">
arrPathList = Split(strPath, "/"<IMG SRC="smile/05.gif">
intLevel = UBound(arrPathList)
I = 0 から intLevel まで
I = 0 の場合
tmptPath = arrPathList(0) & "/"
それ以外
tmptPath = tmptPath & arrPathList(I) & "/"
終了の場合
tmpPath = Left(tmptPath, Len(tmptPath) - 1)
objFolder.FolderExists(tmpPath) でない場合は、objFolder.CreateFolder tmpPath
次
objFolder = なしを設定します
Err.Number <> 0 の場合、次に
CreateDir = False
エラークリア
それ以外
CreateDir = True
終了の場合
終了機能
レム ############################################# ## ##############################
Rem ## 長整数変換
レム ############################################# ## ##############################
プライベート関数 toNum(s、デフォルト)
IsNumeric(s) かつ s <> "" の場合
toNum = CLng(s)
それ以外
toNum = デフォルト
終了の場合
終了機能
レム ############################################# ## ##############################
終了クラス
レム ############################################# ## ##################################
%>