ASP 프로그램 자동 업그레이드 기능 구현

현재 가상 호스트 가 역 을 만 드 는 것 이 유행 하고 있 습 니 다.저도 사이트 가 있 고 역장 이 라 고 할 수 있 습 니 다.최근 1 년 동안 역장 이 되 었 을 때 사이트 프로그램 이 업 그 레이 드 될 때마다 매우 번 거 로 움 을 느 꼈 다.먼저 공식 적 으로 공 고 를 본 다음 에 업그레이드 패 키 지 를 로 컬 에 다운로드 하여 압축 을 풀 고 FTP 를 가상 호스트 에 업로드 했다.힘 든 육체 노동 인 데다 가 본인 도 귀 찮 기 때문에 프로그램 이 자동 으로 업그레이드 되 었 으 면 좋 겠 다 고 생각 합 니 다.그래서 생각 하고 본문 을 썼 습 니 다.WEB 프로그램 개발 자 에 게 도움 이 되 었 으 면 좋 겠 습 니 다.여 기 는 ASP 만 을 대상 으로 합 니 다.왜냐하면 저 는 ASP 만 할 줄 알 기 때 문 입 니 다. :-( 먼저 전통 적 인 win 32 프로그램의 업그레이드 과정(예 를 들 어 백신 소프트웨어)을 살 펴 보 자.소프트웨어 의 업그레이드 프로그램 에 의 해 네트워크 를 통 해 서버 에 연결 하여 분석 하고 업그레이드 파일 을 로 컬 로 다운로드 하 는 것 이다.WEB 프로그램 은 WEB 서버 에서 실행 되 기 때문에 약간 다르다.최종 적 으로 업 그 레이 드 된 서버 의 파일 을 WEB 서버 에 덮어 쓰 려 고 합 니 다.역장 의 컴퓨터 는 중간 에 만 있 습 니 다.업 그 레이 드 된 서버 의 파일 을 WEB 서버 로 직접 복사 하면 자동 업 그 레이 드 를 실현 합 니 다.다행히 시스템 에서 하 나 를 가 져 왔 습 니 다. Microsoft.XMLHTTP 구성 요 소 는 WEB 에 접근 하 는 데 사 용 됩 니 다.ASP 에서 이 를 호출 하여 업그레이드 서버 에 연결 하여 업그레이드 파일 을 다운로드 할 수 있 습 니 다.다음 코드 는 이용 Microsoft.XML HTTP 파일 다운로드 의 예:<%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("파일 다운로드 성공!
") %>  위 코드 는 바로... http://www.0x54.org/test.exeWEB 서버 의 현재 디 렉 터 리 에 저장 합 니 다.Microsoft.XML HTTP 에 대해 서 는... 더 많은 용법 은 MSDN 을 보 는 것 이 좋 겠 습 니 다.파일 이 많 으 면 여러 번 Microsoft.XML HTTP 로 네트워크 를 연결 하면 연결 에 실패 한 일부 파일 이 업데이트 되 지 않 는 경우 가 발생 할 수 있 으 므 로 이 를 피하 기 위해 서 는 모든 파일 을 하나의 파일 로 포장 해 한 번 에 WEB 에 다운로드 한 뒤 해 지 하 는 것 이 좋다.하하,여기 서 말 하 는 포장 은 RAR 이나 ZIP 가방 이 아니 라 우리 가 정의 하 는 것 입 니 다.예 를 들 어 모든 파일 을 하나 로 연결 한 다음 에 특수 한 기호 에 따라 분리 한다.지금 은 이렇게 번 거 롭 지 않 습 니 다.이미 만들어 진 방법 이 있 기 때문에 우 리 는 가 져 오기 주 의 를 사용 합 니 다.모든 파일(바 이 너 리 형식)과 그 경로 정 보 를 Access 데이터베이스 에 넣 는 것 입 니 다.아래 vbs 파일(해양 정상 2006 Plus)은 현재 디 렉 터 리 의 모든 파일 을 포장 하 는 것 입 니 다: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 프로그램 을 사용 하고 게 으 른 사람 을 기다 리 며 여 유 롭 게 해 주 기 를 바 랍 니 다.하하.

좋은 웹페이지 즐겨찾기