●Descripción: Clase de actualización en línea de ASP ●Versión: 1.0.0
●Autor: Xiao Yuehen (xiaoyuehen)
●MSN: xiaoyuehen(arroba)msn.com
●Reemplace (arroba) con @●Copyright: dado que se comparte, los derechos de autor no importan. ¡Pero debe limitarse a la difusión en línea y no puede usarse en los medios tradicionales!
●¡Estaría aún más agradecido si pudieras conservar estas instrucciones!
●Si tiene una mejor optimización del código y mejoras relacionadas, recuerde decírmelo, ¡muchas gracias!
●Ideas:
1. Consultar la lista de versiones => 2. Comparar diferencias de versiones => 3. Obtener la lista de actualizaciones de la siguiente versión superior, si no hay una versión superior, vaya al paso 5 => 4. Actualizar => volver al paso 3
5. Salga de la actualización. ●Otras instrucciones: Actualización incremental.
●Fuera de tema: tomó alrededor de 7 horas en total. Fue un poco apresurado y el código no se refinó lo suficiente. Durante las pruebas locales, tomó casi 1 segundo actualizar dos versiones y un total de 4 archivos.
Nunca he hecho algo similar antes, así que no puedo hablar de ningún algoritmo. Amigos que lo hayan hecho, por favor denme sus opiniones.
●Este código está destinado a comunicarse entre sí●
●Antes de comenzar, lea atentamente las siguientes instrucciones.
●Requisitos del lado del servidor:
1. Administrador del sitio, puede acceder a la versión y a la información de actualización relacionada a través de la dirección URL.
2. Archivo de información de versión, como Version.asp
3. El directorio de cada versión debe estar en el directorio especificado por UrlUpdate (consulte la descripción a continuación. Por ejemplo: UrlUpdate es http://Localhost/__Jxc/Update/) .
Si la versión es 1.0.8, el archivo de actualización de esta versión debe estar ubicado en http://Localhost/__Jxc/Update/108/ .
4. La información devuelta por la información de la versión es una lista, cada línea representa una información de la versión (no se permiten líneas en blanco) y la versión superior está en la parte superior. El formato es el siguiente:
1.1.0
1.0.8
1.0.0
5. El formato de información de actualización de archivos de una determinada versión es eliminar el número después del número + Tipo de archivo (consulte la descripción a continuación) y colocarlo en UrlUpdate, como: http://Localhost/__Jxc/Update/110.asp . y su formato de contenido es el siguiente:
3.htm|Prueba/Prueba/3.asp
4.htm|Prueba/Prueba/4.asp
5.htm|Prueba/5.asp
6.htm|Prueba/6.asp
Separe el archivo de origen y el archivo de destino con |. El archivo de origen se leerá desde el directorio de la versión correspondiente, como se muestra arriba, la dirección correspondiente de 3.htm debe ser
http://Localhost/__Jxc/Update/110/3.htm
Si UpdateLocalPath = "/", el destino de actualización correspondiente de Test/Test/3.asp es /Test/Test/3.asp. Durante el proceso de actualización, el programa creará automáticamente un directorio inexistente.
Y sobrescriba el archivo de destino.
●Requisitos del cliente:
IIS 5.0 o superior
Soporte FSO (para generar archivos)
Compatibilidad con Adodb.Stream (para conversión de codificación)
Soporte Microsoft.XMLHTTP (para recuperación remota de información)
●Atributos:
Información Obtenga la última información durante el proceso de actualización ●Descripción del parámetro:
UrlVersion ●Obligatorio● URL completa de la información de la versión, comenzando con http://
UrlUpdate ●Obligatorio● URL de actualización, que comienza con http:// y termina con /
UpdateLocalPath ●Obligatorio● Directorio de actualización local, que comienza con / y termina con /. El inicio con / es para actualizar el sitio actual ●Valor predeterminado● /.
UrlHistory ●Obligatorio● Nombre del archivo del historial de software generado
Versión local ●Obligatorio● Información de la versión actual ●Valor predeterminado● 1.0.0
Tipo de archivo ●Obligatorio● Sufijo de información de versión ●Valor predeterminado● .asp
●Descripción del método:
actualizar actualización
Una vez configurados los parámetros relevantes, puede iniciar el nivel largo de esta manera ●Otras instrucciones: El número de versión debe estar compuesto por números del 0 al 9 y ., y el primer dígito no puede ser inferior a 1. La longitud de cada versión. El número debe ser el mismo. Por ejemplo, 1.0 .0 y 1.2.2 o 1.2.04 y 1.2.78.
●Ejemplo:
código de programa
<!--#include file="../__Inc/Cls_OnlineUpdate.asp"-->
<%
Actualización de obj tenue
Establecer objUpdate = Nuevo Cls_oUpdate
Con objUpdate
.UrlVersion = " http://Localhost/__Jxc/Update/Version.asp "
.UrlUpdate = " http://Localhost/__Jxc/Update/ "
.UpdateLocalPath = "/"
.LocalVersion = "1.0.0"
.doActualizar
respuesta.Escribir(.Info)
Terminar con
Establecer objUpdate = Nada
%>
Archivos de clase:
código de programa
<%
Rem ############################################### ## ##################################
Rem ## Declaración de clase de actualización en línea
Clase Cls_oActualización
Rem ############################################### ## ##############
Rem ## Descripción: Clase de actualización en línea de ASP
Rem ## Versión: 1.0.0
Rem ## Autor: Xiao Yuehen
Rem ## MSN: xiaoyuehen(arroba)msn.com
Rem ## Por favor reemplace (arroba) con @
Rem ## Copyright: dado que se comparte, no hay derechos de autor, ¡pero debe limitarse a la difusión en línea y no puede usarse en medios tradicionales!
Rem ## ¡Si puedes conservar estas instrucciones, te lo agradecería aún más!
Rem ## Si tiene una mejor optimización del código y mejoras relacionadas, recuerde decírmelo, ¡muchas gracias!
Rem ############################################### ## ##############
Versión local pública, última versión, tipo de archivo
Versión de URL pública, actualización de URL, ruta local de actualización, información
Historial de URL públicas
sstrVersionList privado, sarrVersionList, sintLocalVersion, sstrLocalVersion
Privado sstrLogContent, sstrHistoryContent, sstrUrlUpdate, sstrUrlLocal
Rem ############################################### ## ##############
Subclase privada_Initialize()
Rem ## URL completa de la información de la versión, comenzando con http://
Rem ## Ejemplo: http://localhost/software/Version.htm
VersiónUrl = ""
Rem ## URL de actualización, que comienza con http:// y termina con /
Rem ## Ejemplo: http://localhost/software/
Actualización de URL = ""
Rem ## Directorio de actualización local, que comienza con / y termina con /. Comenzando con / es para actualizar el sitio actual.
Rem ## El programa comprobará si el directorio existe. Si no existe, se creará automáticamente.
UpdateLocalPath = "/"
Rem ## Archivo de historial de software generado
UrlHistory = "historia.htm"
Rem ## Último mensaje de aviso
Información = ""
Rem ## Versión actual
Versión local = "1.0.0"
Rem ## última versión
Última versión = "1.0.0"
Rem ## El nombre del sufijo de cada archivo de información de versión.
Tipo de archivo = ".asp"
Subtítulo final
Rem ############################################### ## ##############
Rem ############################################### ## ##############
Subclase privada_Terminate()
Subtítulo final
Rem ############################################### ## ##############
Rem ## Realizar acción de actualización
Rem ############################################### ## ##############
Función pública doUpdate()
actualizar = falso
VersiónUrl = Recortar(VersiónUrl)
Actualización de URL = Recortar (Actualización de URL)
Rem ## Actualizar detección de URL
Si (Left(UrlVersion, 7) <> "http://") o (Left(UrlUpdate, 7) <> "http://") Entonces
Info = "La URL de detección de versión está vacía, la URL de actualización está vacía o tiene el formato incorrecto (#1)"
Función de salida
Terminar si
Si es correcto (UrlUpdate, 1) <> "/" Entonces
sstrUrlUpdate = Actualización de URL & "/"
Demás
sstrUrlUpdate = Actualización de URL
Terminar si
Si es correcto (UpdateLocalPath, 1) <> "/" Entonces
sstrUrlLocal = UpdateLocalPath & "/"
Demás
sstrUrlLocal = ActualizarRutaLocal
Terminar si
Rem ## Información de la versión actual (número)
sstrLocalVersion = Versión Local
sintLocalVersion = Reemplazar(sstrLocalVersion, ".", "")
sintLocalVersion = toNum(sintLocalVersion, 0)
Rem ## Detección de versión (inicializa la información de la versión y compara)
Si es IsLastVersion, entonces salga de la función
Rem ## Iniciar actualización
doUpdate = AhoraActualizar()
ÚltimaVersión = sstrLocalVersion
Función final
Rem ############################################### ## ##############
http://bizhi.downcodes.com/
Rem ## Comprueba si es la última versión.
Rem ############################################### ## ##############
Función privada IsLastVersion()
Rem ## Inicializar información de versión (inicializar matriz sarrVersionList)
Si iniVersionList Entonces
Rem ## Si tiene éxito, compare versiones
Yo tenue
EsLastVersion = Verdadero
Para i = 0 a UBound(sarrVersionList)
Si sarrVersionList(i) > sintLocalVersion Entonces
Rem ## Si existe la última versión, salga del bucle.
EsLastVersion = Falso
Info = "¡Ya la última versión!"
Salir por
Terminar si
Próximo
Demás
Rem ## De lo contrario, devolverá un mensaje de error
EsLastVersion = Verdadero
Info = "¡Error al obtener información de la versión!(#2)"
Terminar si
Función final
Rem ############################################### ## ##############
Rem ## Comprueba si es la última versión.
Rem ############################################### ## ##############
Función privada iniVersionList()
iniVersionList = Falso
Dim strVersión
strVersion = getVersionList()
Rem ## Si el valor de retorno está vacío, la inicialización falla.
Si strVersion = "" Entonces
Información = "Error..."
Función de salida
Terminar si
sstrVersionList = Reemplazar(strVersion, " ", "")
sarrVersionList = Dividir(sstrVersionList, vbCrLf)
iniVersionList = Verdadero
Función final
Rem ############################################### ## ##############
Rem ## Comprueba si es la última versión.
Rem ############################################### ## ##############
Función privada getVersionList()
getVersionList = ObtenerContenido(UrlVersion)
Función final
Rem ############################################### ## ##############
Rem ## Iniciar actualización
Rem ############################################### ## ##############
Función privada NowUpdate()
Yo tenue
Para i = UBound(sarrVersionList) a 0 paso -1
Llame a doUpdateVersion(sarrVersionList(i))
Próximo
Info = "¡Actualización completada! <a href=""" & sstrUrlLocal & UrlHistory & """>Ver</a>"
Función final
Rem ############################################### ## ##############
http://qqface.downcodes.com/
Rem ## Contenido de la versión actualizada
Rem ############################################### ## ##############
Función privada doUpdateVersion(strVer)
doUpdateVersion = Falso
IntVer tenue
intVer = toNum(Reemplazar(strVer, ".", ""), 0)
Rem ## Si la versión actualizada es más pequeña que la versión actual, salga de la actualización
Si intVer <= sintLocalVersion Entonces
Función de salida
Terminar si
Dim strFileListContent, arrFileList, strUrlUpdate
strUrlUpdate = sstrUrlUpdate & intVer & FileType
strFileListContent = ObtenerContenido(strUrlUpdate)
Si strFileListContent = "" Entonces
Función de salida
Terminar si
Rem ## Actualizar el número de versión actual
sintLocalVersion = intVer
sstrLocalVersion = strVer
Dim i, arrTmp
Rem ## Obtener lista de archivos de actualización
arrFileList = Dividir(strFileListContent, vbCrLf)
Rem ## Actualizar registro
sstrLogContent = ""
sstrLogContent = sstrLogContent & strVer & ":" & vbCrLf
Rem ## Iniciar actualización
Para i = 0 a UBound(arrFileList)
Rem ## Formato de actualización: número de versión/archivo.htm|archivo de destino
arrTmp = Dividir(arrFileList(i), "|")
sstrLogContent = sstrLogContent y vbTab y arrTmp(1)
Llame a doUpdateFile(intVer & "/" & arrTmp(0), arrTmp(1))
Próximo
Rem ## Escribir en el archivo de registro
sstrLogContent = sstrLogContent & Ahora() & vbCrLf
respuesta.Write("<pre>" & sstrLogContent & "</pre>")
Llame a sDoCreateFile(Server.MapPath(sstrUrlLocal & "Log" & intVer & ".htm"), _
"<pre>" & sstrLogContent & "</pre>")
Llame a sDoAppendFile(Server.MapPath(sstrUrlLocal & UrlHistory), "<pre>" & _
strVer & "_______" & Ahora() & "</pre>" & vbCrLf)
Función final
Rem ############################################### ## ##############
Rem ## actualizar archivo
Rem ############################################### ## ##############
Función privada doUpdateFile(strSourceFile, strTargetFile)
Dim strContenido
strContent = ObtenerContenido(sstrUrlUpdate & strSourceFile)
Rem ## Actualizar y escribir en el registro
Si sDoCreateFile(Server.MapPath(sstrUrlLocal & strTargetFile), strContent) Entonces
sstrLogContent = sstrLogContent & "Éxito" & vbCrLf
Demás
sstrLogContent = sstrLogContent y "Error" y vbCrLf
Terminar si
Función final
Rem ############################################### ## ##############
Rem ## Obtener contenido de forma remota
Rem ############################################### ## ##############
Función privada GetContent(strUrl)
Obtener contenido = ""
Dim oXhttp, strContent
Establecer oXhttp = Server.CreateObject ("Microsoft.XMLHTTP")
'En caso de error, reanudar siguiente
Con oXhttp
.Abrir "GET", strUrl, False, "", ""
.Enviar
Si .readystate <> 4 Entonces salga de la función
strContenido = .Responsebody
strContenido = sBytesToBstr(strContenido)
Terminar con
Establecer oXhttp = Nada
Si Número de error <> 0 Entonces
respuesta.Escribir(Err.Descripción)
Err.Borrar
Función de salida
Terminar si
ObtenerContenido = strContenido
Función final
Rem ############################################### ## ##############
Rem ############################################### ## ##############
Rem ## Conversión de codificación binaria => cadena
Función privada sBytesToBstr(vIn)
dimobjStream
establecer objStream = Server.CreateObject("adodb.stream")
objStream.Tipo = 1
objStream.Modo = 3
objStream.Open
objStream.Escribir vIn
objStream.Posición = 0
objStream.Tipo = 2
objStream.Charset = "GB2312"
sBytesToBstr = objStream.ReadText
objStream.Cerrar
establecer objStream = nada
Función final
Rem ############################################### ## ##############
Rem ############################################### ## ##############
Rem ## Conversión de codificación binaria => cadena
Función privada sDoCreateFile(strFileName, ByRef strContent)
sDoCreateFile = Falso
Dim strPath
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## Verifique la validez de la ruta y el nombre del archivo
Si no (CreateDir (strPath)) entonces salga de la función
'Si no (CheckFileName(strFileName)) entonces salga de la función
'respuesta.Escribir(strFileName)
Const para leer = 1, para escribir = 2, para agregar = 8
tenue fso, f
Establecer fso = CreateObject("Scripting.FileSystemObject")
Establecer f = fso.OpenTextFile(strFileName, ForWriting, True)
f.Escribir strContent
f.Cerrar
Establecer fso = nada
Establecer f = nada
sDoCreateFile = Verdadero
Función final
Rem ############################################### ## ##############
Rem ############################################### ## ##############
Rem ## Conversión de codificación binaria => cadena
Función privada sDoAppendFile(strFileName, ByRef strContent)
sDoAppendFile = Falso
Dim strPath
strPath = Left(strFileName, InstrRev(strFileName, "", -1, 1))
Rem ## Verifique la validez de la ruta y el nombre del archivo
Si no (CreateDir (strPath)) entonces salga de la función
'Si no (CheckFileName(strFileName)) entonces salga de la función
'respuesta.Escribir(strFileName)
Const para leer = 1, para escribir = 2, para agregar = 8
tenue fso, f
Establecer fso = CreateObject("Scripting.FileSystemObject")
Establecer f = fso.OpenTextFile(strFileName, ForAppending, True)
f.Escribir strContent
f.Cerrar
Establecer fso = nada
Establecer f = nada
sDoAppendFile = Verdadero
Función final
Rem ############################################### ## ##############
Rem ## Programa para crear un directorio. Si hay varios niveles de directorios, créelos uno por uno.
Rem ############################################### ## ##############
Función privada CreateDir (ByVal strLocalPath)
Dim i, strPath, objFolder, tmpPath, tmptPath
Dim arrPathList, intLevel
'En caso de error, reanudar siguiente
strPath = Reemplazar (strLocalPath, "", "/")
Establecer objFolder = server.CreateObject("Scripting.FileSystemObject")
arrPathList = Dividir(strPath, "/")
intNivel = UBound(arrPathList)
Para I = 0 Para intLevel
Si yo = 0 entonces
tmptPath = arrPathList(0) & "/"
Demás
tmptPath = tmptPath & arrPathList(I) & "/"
Terminar si
tmpPath = Izquierda(tmptPath, Len(tmptPath) - 1)
Si no es objFolder.FolderExists (tmpPath), entonces objFolder.CreateFolder tmpPath
Próximo
Establecer objFolder = Nada
Si Número de error <> 0 Entonces
CrearDir = Falso
Err.Borrar
Demás
CrearDir = Verdadero
Terminar si
Función final
Rem ############################################### ## ##############
Rem ## conversión de entero largo
Rem ############################################### ## ##############
Función privada paraNum(s, predeterminado)
Si IsNumeric(s) y s <> "" entonces
toNum = CLng(s)
Demás
toNum = predeterminado
Terminar si
Función final
Rem ############################################### ## ##############
Fin de clase
Rem ############################################### ## ##################################
%>