●Descrição: Classe de atualização on-line ASP ●Versão: 1.0.0
●Autor: Xiao Yuehen (xiaoyuehen)
●MSN: xiaoyuehen(at)msn.com
●Por favor, substitua (at) por @●Copyright: Como é compartilhado, os direitos autorais não importam. Mas devem ser limitados à divulgação on-line e não podem ser usados na mídia tradicional!
●Ficaria ainda mais grato se você pudesse guardar estas instruções!
●Se você tiver uma melhor otimização de código e melhorias relacionadas, lembre-se de me dizer, muito obrigado!
●Ideias:
1. Consulte a lista de versões => 2. Compare as diferenças de versão => 3. Obtenha a lista de atualização da próxima versão superior, se não houver versão superior, pule para a etapa 5 => 4. Atualizar => retorne à etapa 3
5. Sair da atualização ●Outras instruções: Atualização incremental.
●Fora do tópico: Demorou cerca de 7 horas no total. Foi um pouco apressado e o código não foi refinado o suficiente. Durante os testes locais, demorou quase 1 segundo para atualizar duas versões e um total de 4 arquivos.
Nunca fiz nada parecido antes, então não posso falar sobre nenhum algoritmo. Amigos que fizeram isso, por favor, me dêem suas opiniões.
●Este código destina-se à comunicação entre si●
●Antes de começar, leia atentamente as instruções a seguir.
●Requisitos do lado do servidor:
1. Site Manager, você pode acessar a versão e informações de atualização relacionadas através do endereço URL.
2. Arquivo de informações de versão, como Version.asp
3. Cada diretório de versão deve estar no diretório especificado por UrlUpdate (veja a descrição abaixo: UrlUpdate é http://Localhost/__Jxc/Update/ ,).
Se a versão for 1.0.8, o arquivo de atualização desta versão deverá estar localizado em http://Localhost/__Jxc/Update/108/ .
4. As informações retornadas pelas informações de versão são uma lista, cada linha representa uma informação de versão (não são permitidas linhas em branco) e a versão superior está no topo.
1.1.0
1.0.8
1.0.0
5. O formato das informações de atualização do arquivo de uma determinada versão é remover o número após o número + FileType (veja a descrição abaixo) e colocá-lo em UrlUpdate, como: http://Localhost/__Jxc/Update/110.asp , e seu formato de conteúdo é o seguinte:
3.htm|Teste/Teste/3.asp
4.htm|Teste/Teste/4.asp
5.htm|Teste/5.asp
6.htm|Teste/6.asp
Separe o arquivo de origem e o arquivo de destino com |. O arquivo de origem será lido no diretório da versão correspondente, conforme mostrado acima, o endereço correspondente de 3.htm deve ser
http://Localhost/__Jxc/Update/110/3.htm
Se UpdateLocalPath = "/", o destino de atualização correspondente de Test/Test/3.asp é /Test/Test/3.asp Durante o processo de atualização, o programa criará automaticamente um diretório inexistente.
E substitua o arquivo de destino
●Requisitos do cliente:
IIS 5.0 ou superior
Suporte FSO (para geração de arquivos)
Suporte Adodb.Stream (para conversão de codificação)
Suporte Microsoft.XMLHTTP (para recuperação remota de informações)
●Atributos:
Informações Obtenha as últimas informações durante o processo de atualização ●Descrição dos parâmetros:
UrlVersion ●Obrigatório● URL completo das informações da versão, começando com http://
UrlUpdate ●Obrigatório● URL de atualização, começando com http:// e terminando com /
UpdateLocalPath ●Obrigatório ● Diretório de atualização local, começando com / e terminando com / é para atualizar o site atual ● Valor padrão ● /.
UrlHistory ●Obrigatório● Nome do arquivo de histórico de software gerado
LocalVersion ●Obrigatório● Informações sobre a versão atual ●Valor padrão● 1.0.0
Tipo de arquivo ● Obrigatório ● Sufixo de informações de versão ● Valor padrão ● .asp
●Descrição do método:
fazerAtualizar atualização
Depois que os parâmetros relevantes forem definidos, você poderá iniciar o nível longo desta forma ●Outras instruções: O número da versão deve ser composto por números de 0 a 9 e ., e o primeiro dígito não pode ser menor que 1. O comprimento de cada versão. o número deve ser o mesmo. Por exemplo, 1.0 .0 e 1.2.2 ou 1.2.04 e 1.2.78.
●Exemplo:
código do programa
<!--#include file="../__Inc/Cls_OnlineUpdate.asp"-->
<%
Dim objAtualizar
Definir objUpdate = Novo Cls_oUpdate
Com objUpdate
.UrlVersion = " http://Localhost/__Jxc/Update/Version.asp "
.UrlUpdate = " http://Localhost/__Jxc/Update/ "
.UpdateLocalPath = "/"
.LocalVersion = "1.0.0"
.doUpdate
resposta.Write(.Info)
Terminar com
Definir objUpdate = Nada
%>
Arquivos de classe:
código do programa
<%
Rem ############################################### #################################
Rem ## Declaração de classe de atualização online
Classe Cls_oUpdate
Rem ############################################### ##############
Rem ## Descrição: classe de atualização online ASP
Rem ## Versão: 1.0.0
Rem ## Autor: Xiao Yuehen
Rem ## MSN: xiaoyuehen(at)msn.com
Rem ## Substitua (arroba) por @
Rem ## Copyright: Por ser compartilhado, não há direitos autorais. Mas deve ser limitado à divulgação online e não pode ser usado na mídia tradicional!
Rem ## Se você puder guardar essas instruções, ficaria ainda mais grato!
Rem ## Se você tiver uma melhor otimização de código e melhorias relacionadas, lembre-se de me dizer, muito obrigado!
Rem ############################################### ##############
LocalVersion pública, LastVersion, FileType
UrlVersion pública, UrlUpdate, UpdateLocalPath, Informações
Histórico de URL público
sstrVersionList privado, sarrVersionList, sintLocalVersion, sstrLocalVersion
SstrLogContent privado, sstrHistoryContent, sstrUrlUpdate, sstrUrlLocal
Rem ############################################### ##############
Subclasse Privada_Initialize()
Rem ## URL completo das informações da versão, começando com http://
Rem ## Exemplo: http://localhost/software/Version.htm
URLVersão = ""
Rem ## URL de atualização, começando com http:// e terminando com /
Rem ## Exemplo: http://localhost/software/
UrlUpdate = ""
Rem ## Diretório de atualização local, começando com / e terminando com / é para atualizar o site atual.
Rem ## O programa irá verificar se o diretório existe. Caso não exista, ele será criado automaticamente.
UpdateLocalPath = "/"
Rem ## Arquivo de histórico de software gerado
UrlHistory = "história.htm"
Rem ## Última mensagem de prompt
Informações = ""
Rem ## Versão atual
VersãoLocal = "1.0.0"
Rem ## versão mais recente
Última versão = "1.0.0"
Rem ## O nome do sufixo de cada arquivo de informações de versão
Tipo de arquivo = ".asp"
Finalizar sub
Rem ############################################### ##############
Rem ############################################### ##############
Subclasse Privada_Terminate()
Finalizar sub
Rem ############################################### ##############
Rem ## Executar ação de atualização
Rem ############################################### ##############
Função pública doUpdate()
doUpdate = Falso
UrlVersion = Trim(UrlVersion)
UrlUpdate = Trim(UrlUpdate)
Rem ## Detecção de URL de atualização
Se (Left(UrlVersion, 7) <> "http://") ou (Left(UrlUpdate, 7) <> "http://") Então
Info = "O URL de detecção de versão está vazio, o URL de atualização está vazio ou tem o formato errado (#1)"
Função de saída
Terminar se
If Right(UrlUpdate, 1) <> "/" Então
sstrUrlUpdate = UrlUpdate & "/"
Outro
sstrUrlUpdate = UrlUpdate
Terminar se
If Right(UpdateLocalPath, 1) <> "/" Então
sstrUrlLocal = UpdateLocalPath & "/"
Outro
sstrUrlLocal = UpdateLocalPath
Terminar se
Rem ## Informações da versão atual (número)
sstrLocalVersion = LocalVersion
sintLocalVersion = Substituir(sstrLocalVersion, ".", "")
sintLocalVersion = toNum(sintLocalVersion, 0)
Rem ## Detecção de versão (inicializar informações de versão e comparar)
Se IsLastVersion então sai da função
Rem ## Iniciar atualização
doUpdate = AgoraAtualizar()
ÚltimaVersão = sstrLocalVersion
Função final
Rem ############################################### ##############
http://bizhi.downcodes.com/
Rem ## Verifique se é a versão mais recente
Rem ############################################### ##############
Função privada IsLastVersion()
Rem ## Inicializar informações de versão (inicializar array sarrVersionList)
Se iniVersionList então
Rem ## Se for bem-sucedido, compare as versões
Escureça eu
IsLastVersion = Verdadeiro
Para i = 0 para UBound(sarrVersionList)
Se sarrVersionList(i) > sintLocalVersion Então
Rem ## Se houver a versão mais recente, saia do loop
IsLastVersion = Falso
Info = "Já é a versão mais recente!"
Sair para
Terminar se
Próximo
Outro
Rem ## Caso contrário, retorne mensagem de erro
IsLastVersion = Verdadeiro
Info = "Erro ao obter informações da versão!(#2)"
Terminar se
Função final
Rem ############################################### ##############
Rem ## Verifique se é a versão mais recente
Rem ############################################### ##############
Função privada iniVersionList()
iniVersionList = Falso
Dim strVersão
strVersion = getVersionList()
Rem ## Se o valor de retorno estiver vazio, a inicialização falhará.
Se strVersion = "" Então
Informações = "Erro......"
Função de saída
Terminar se
sstrVersionList = Substituir(strVersion, " ", "")
sarrVersionList = Dividir(sstrVersionList, vbCrLf)
iniVersionList = Verdadeiro
Função final
Rem ############################################### ##############
Rem ## Verifique se é a versão mais recente
Rem ############################################### ##############
Função privada getVersionList()
getVersionList = GetContent(UrlVersion)
Função final
Rem ############################################### ##############
Rem ## Comece a atualizar
Rem ############################################### ##############
Função privada NowUpdate()
Escureça eu
Para i = UBound(sarrVersionList) para 0 passo -1
Chame doUpdateVersion(sarrVersionList(i))
Próximo
Info = "Atualização concluída! <a href=""" & sstrUrlLocal & UrlHistory & """>Ver</a>"
Função final
Rem ############################################### ##############
http://qqface.downcodes.com/
Rem ## Conteúdo da versão atualizada
Rem ############################################### ##############
Função privada doUpdateVersion(strVer)
doUpdateVersion = Falso
Dim intVer
intVer = toNum(Replace(strVer, ".", ""), 0)
Rem ## Se a versão atualizada for menor que a versão atual, saia da atualização
Se intVer <= sintLocalVersion então
Função de saída
Terminar se
Dim strFileListContent, arrFileList, strUrlUpdate
strUrlUpdate = sstrUrlUpdate & intVer & FileType
strFileListContent = GetContent(strUrlUpdate)
Se strFileListContent = "" Então
Função de saída
Terminar se
Rem ## Atualize o número da versão atual
sintLocalVersion = intVer
sstrLocalVersion = strVer
Dim eu, arrTmp
Rem ## Obter lista de arquivos de atualização
arrFileList = Dividir(strFileListContent, vbCrLf)
Rem ## Registro de atualização
sstrLogContent = ""
sstrLogContent = sstrLogContent & strVer & ":" & vbCrLf
Rem ## Comece a atualizar
Para i = 0 para UBound(arrFileList)
Rem ## Formato de atualização: número da versão/arquivo.htm|arquivo de destino
arrTmp = Split(arrFileList(i), "|")
sstrLogContent = sstrLogContent & vbTab & arrTmp(1)
Chame doUpdateFile(intVer & "/" & arrTmp(0), arrTmp(1))
Próximo
Rem ## Grava no arquivo de log
sstrLogContent = sstrLogContent & Now() & vbCrLf
resposta.Write("<pre>" & sstrLogContent & "</pre>")
Chame sDoCreateFile(Server.MapPath(sstrUrlLocal & "Log" & intVer & ".htm"), _
"<pre>" & sstrLogContent & "</pre>")
Chame sDoAppendFile(Server.MapPath(sstrUrlLocal & UrlHistory), "<pre>" & _
strVer & "_______" & Now() & "</pre>" & vbCrLf)
Função final
Rem ############################################### ##############
Arquivo de atualização Rem ##
Rem ############################################### ##############
Função privada doUpdateFile(strSourceFile, strTargetFile)
Dim strContent
strContent = GetContent(sstrUrlUpdate & strSourceFile)
Rem ## Atualizar e gravar no log
Se sDoCreateFile(Server.MapPath(sstrUrlLocal & strTargetFile), strContent) Então
sstrLogContent = sstrLogContent & "Sucesso" & vbCrLf
Outro
sstrLogContent = sstrLogContent & "Falha" & vbCrLf
Terminar se
Função final
Rem ############################################### ##############
Rem ## Obtenha conteúdo remotamente
Rem ############################################### ##############
Função privada GetContent(strUrl)
GetContent = ""
Dim oXhttp, strContent
Definir oXhttp = Server.CreateObject("Microsoft.XMLHTTP")
'Em caso de erro, retomar próximo
Com oXhttp
.Abra "GET", strUrl, False, "", ""
.Enviar
Se .readystate <> 4 Então sai da função
strContent = .Responsebody
strContent = sBytesToBstr(strContent)
Terminar com
Definir oXhttp = Nada
Se Err.Number <> 0 Então
resposta.Write(Err.Descrição)
Err.Limpar
Função de saída
Terminar se
GetContent = strContent
Função final
Rem ############################################### ##############
Rem ############################################### ##############
Rem ## Codificação de conversão binária => string
Função privada sBytesToBstr(vIn)
dimobjStream
definir objStream = Server.CreateObject("adodb.stream")
objStream.Type = 1
objStream.Mode = 3
objStream.Open
objStream.Write vIn
objStream.Position = 0
objStream.Type = 2
objStream.Charset = "GB2312"
sBytesToBstr = objStream.ReadText
objStream.Fechar
definir objStream = nada
Função final
Rem ############################################### ##############
Rem ############################################### ##############
Rem ## Codificação de conversão binária => string
Função privada sDoCreateFile(strFileName, ByRef strContent)
sDoCreateFile = Falso
Dim strPath
strPath = Esquerda(strNomeArquivo, InstrRev(strNomeArquivo, "", -1, 1))
Rem ## Verifique a validade do caminho e nome do arquivo
If Not(CreateDir(strPath)) Então sai da função
'If Not(CheckFileName(strFileName)) Então sai da função
'response.Write(strNomeArquivo)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Definir fso = CreateObject("Scripting.FileSystemObject")
Definir f = fso.OpenTextFile(strFileName, ForWriting, True)
f.Escrever strContent
f.Fechar
Defina fso = nada
Definir f = nada
sDoCreateFile = Verdadeiro
Função final
Rem ############################################### ##############
Rem ############################################### ##############
Rem ## Codificação de conversão binária => string
Função privada sDoAppendFile(strFileName, ByRef strContent)
sDoAppendFile = Falso
Dim strPath
strPath = Esquerda(strNomeArquivo, InstrRev(strNomeArquivo, "", -1, 1))
Rem ## Verifique a validade do caminho e nome do arquivo
If Not(CreateDir(strPath)) Então sai da função
'If Not(CheckFileName(strFileName)) Então sai da função
'response.Write(strNomeArquivo)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Definir fso = CreateObject("Scripting.FileSystemObject")
Definir f = fso.OpenTextFile(strFileName, ForAppending, True)
f.Escrever strContent
f.Fechar
Defina fso = nada
Definir f = nada
sDoAppendFile = Verdadeiro
Função final
Rem ############################################### ##############
Rem ## Programa para criar um diretório Se houver vários níveis de diretórios, crie-os um por um.
Rem ############################################### ##############
Função privada CreateDir(ByVal strLocalPath)
Dim i, strPath, objFolder, tmpPath, tmptPath
Dim arrPathList, intLevel
'Em caso de erro, retomar próximo
strPath = Substituir(strLocalPath, "", "/")
Definir objFolder = server.CreateObject("Scripting.FileSystemObject")
arrPathList = Split(strPath, "/")
intLevel = UBound(arrPathList)
Para I = 0 Para intLevel
Se eu = 0 então
tmptPath = arrPathList(0) & "/"
Outro
tmptPath = tmptPath & arrPathList(I) & "/"
Terminar se
tmpPath = Esquerda(tmptPath, Len(tmptPath) - 1)
Se não objFolder.FolderExists (tmpPath) Então objFolder.CreateFolder tmpPath
Próximo
Definir objFolder = Nada
Se Err.Number <> 0 Então
CriarDir = Falso
Err.Limpar
Outro
CriarDir = Verdadeiro
Terminar se
Função final
Rem ############################################### ##############
Rem ## conversão de número inteiro longo
Rem ############################################### ##############
Função privada toNum(s, padrão)
Se IsNumeric(s) es <> "" então
toNum = CLng(s)
Outro
toNum = padrão
Terminar se
Função final
Rem ############################################### ##############
Fim da aula
Rem ############################################### #################################
%>