edutraini Posted May 10, 2023 Report Share Posted May 10, 2023 Bom dia, Pessoal Estou implantando no meu sistema um executavel que vai em um ftp e baixa a versao nova do sistema ou seja ele baixa o executavel em um pasta temp e atualiza a versao na maquina do cliente Existe alguma forma de antes de baixar ele comparar a data do executavel , pois quando grava na pasta temp ele fica com a data do dia dessa forma toda hora fica atualizando. Obrigado Quote Link to comment Share on other sites More sharing options...
leo@lhsistemas.com Posted May 10, 2023 Report Share Posted May 10, 2023 Bom dia Edu. Eu gero um arquivo(.TXT) com a chave MD5 dos executáveis do FTP quando faço o Upload. Daí depois antes de baixar novamente do FTP, faço a comparação das chaves, se diferente inicio a atualização. Abraço! Quote Link to comment Share on other sites More sharing options...
alex2002 Posted May 10, 2023 Report Share Posted May 10, 2023 Olá Edu. Segue a parte do meu código que verifica versão nova. Normalmente é um EXE que eu rodo toda vez que entra no meu ERP. Daí se existir versão nova e o cara quiser atualizar, este atualizador fecha o ERP para fazer a atualização. E é bem rápido, como se ele rodasse em background. Um abraço, Alexandre Pereira ////////////////////////////////////////////////////// LOCAL lRetorno := .T. local lErro := .f., lAchou := .f., lTemVersaoNova := .f., lAtualiza := .f. local i local nTamRemoto, nTamLocal cArqLocal := cLocal+'\'+cSistema+'.zip' cArqRemoto := cArquivo // Aqui existe o "for" porque eu e trabalhava com mais de um repositório da versão for i = 1 to 1 if Conecta( i ) visualiza( "Conexão estabelecida, Verificando se existe Atualização..." ) oFtp:Cwd(cPasta) aArquivo := oFTP:listfiles( cArqRemoto ) if len( aArquivo ) = 0 lRetorno := .f. // visualiza('Atualização não encontrada! **** ERRO **** ') else nTamRemoto := aArquivo[1,2] endif oFTP:Close() else lRetorno := .f. endif if lRetorno exit endif next if lRetorno if file( cArqLocal ) nTamLocal := fsize( cArqLocal ) else nTamLocal := 0 endif if nTamRemoto <> nTamLocal lTemVersaoNova := .t. endif else lErro := .t. visualiza("Problemas para verificar nova versão! ") if !lQuiet MsgInfo('Problemas para verificar nova versão!','Erro de Atualização') endif endif if !lErro .and. !lTemVersaoNova visualiza("Não Existe nova versão disponibilizada! ") if !lQuiet MsgInfo('Não Existe nova versão disponível!','Sem Atualização') endif endif if !lErro .and. lTemVersaoNova if MsgYesNo('Existe nova versão disponível do CredPLUS, deseja atualizar?','Nova Versão') lAtualiza := .t. endif endif if lAtualiza visualiza("Resetando conexões...! ") syswait(2) sysrefresh() killprocess(cSistema+".exe") MyWinExec('livecred '+if(lQuiet,'/quiet ','')+cSistema+' '+cPerfil) endif lSair:= .t. quit hb_gcAll() return nil Quote Link to comment Share on other sites More sharing options...
emotta Posted May 10, 2023 Report Share Posted May 10, 2023 Edu não compare data e tamanho do executável, isso não é muito confiavel. Compare o hash do arquivo, vou montar um exemplo e posto aqui. Quote Link to comment Share on other sites More sharing options...
emotta Posted May 10, 2023 Report Share Posted May 10, 2023 segue a funcao CompFile que retorna se os arquivos são iguais ou diferentes Function Teste() Local cFile1 := "arq1.txt" Local cFile2 := "arq2.txt" Local cFile3 := "arq3.txt" Local cCont1 := "testando texto para arquivo 1" Local cCont2 := "testando texto para arquivo 1" Local cCont3 := "testando texto para arquivo 3" MemoWrit(cFile1, cCont1) MemoWrit(cFile2, cCont2) MemoWrit(cFile3, cCont3) If CompFile(cFile1, cFile2) ? cFile1 + " é igual a " + cFile2 Else ? cFile1 + " é diferente de " + cFile2 EndIf If CompFile(cFile1, cFile3) ? cFile1 + " é igual a " + cFile3 Else ? cFile1 + " é diferente de " + cFile3 EndIf ? "fim" return Static Function CompFile(cFile1, cFile2) Local cHash1 := HB_MD5File( cFile1 ) Local cHash2 := HB_MD5File( cFile2 ) Return cHash1 == cHash2 lucimauromelo 1 Quote Link to comment Share on other sites More sharing options...
alex2002 Posted May 10, 2023 Report Share Posted May 10, 2023 No meu caso, antes era por data e hora. Depois que trocamos o servidor, passou a dar problema pq mudou o SO dele. Daí colocamos por tamanho e tem uns 15 anos que não temos problemas. Já colocamos em todo tipo de SO e tem rodado legal. Comparar o hash é legal, mas é bem mais lento, pq ele vai ter que praticamente fazer um donwload do arquivo (ou subir o conteúdo na memória) para fazer comparação. No nosso caso aqui é sem chance, o pacote compactado tem mais de 30 megas, imagina aguardar isso tudo apenas para dizer se tem versão nova. Mas o que vale é ver o que mais funciona para você. Quote Link to comment Share on other sites More sharing options...
wanderso Posted May 10, 2023 Report Share Posted May 10, 2023 34 minutos atrás, alex2002 disse: No meu caso, antes era por data e hora. Depois que trocamos o servidor, passou a dar problema pq mudou o SO dele. Daí colocamos por tamanho e tem uns 15 anos que não temos problemas. Já colocamos em todo tipo de SO e tem rodado legal. Comparar o hash é legal, mas é bem mais lento, pq ele vai ter que praticamente fazer um donwload do arquivo (ou subir o conteúdo na memória) para fazer comparação. No nosso caso aqui é sem chance, o pacote compactado tem mais de 30 megas, imagina aguardar isso tudo apenas para dizer se tem versão nova. Mas o que vale é ver o que mais funciona para você. Mas dependendo do que é alterado no sistema, não muda o tamanho do arquivo, se vc alterou um "a" por "o" no .res do sistema não muda o tamanho. Como fica neste caso? Quote Link to comment Share on other sites More sharing options...
emotta Posted May 10, 2023 Report Share Posted May 10, 2023 35 minutos atrás, alex2002 disse: No meu caso, antes era por data e hora. Depois que trocamos o servidor, passou a dar problema pq mudou o SO dele. Daí colocamos por tamanho e tem uns 15 anos que não temos problemas. Já colocamos em todo tipo de SO e tem rodado legal. Comparar o hash é legal, mas é bem mais lento, pq ele vai ter que praticamente fazer um donwload do arquivo (ou subir o conteúdo na memória) para fazer comparação. No nosso caso aqui é sem chance, o pacote compactado tem mais de 30 megas, imagina aguardar isso tudo apenas para dizer se tem versão nova. Mas o que vale é ver o que mais funciona para você. Alex, seria legal você fazer um teste, mas acredito que é muito rápido obter o MD5. O importante é que não seja um processo executado a todo minuto, mas se for executado só algumas vezes por dia não terá problema. Agora se ficar lento pra você, realmente é melhor continuar checando data/hora/tamanho, mas se o usuário abre o executavel na máquina ele também faz download do executável e o executa, o que demora muito mais. Hoje em dia para o usuário abrir o seu programa (de 30mb) demora muito pra começar a executar? Quote Link to comment Share on other sites More sharing options...
wanderso Posted May 10, 2023 Report Share Posted May 10, 2023 3 horas atrás, emotta disse: segue a funcao CompFile que retorna se os arquivos são iguais ou diferentes Function Teste() Local cFile1 := "arq1.txt" Local cFile2 := "arq2.txt" Local cFile3 := "arq3.txt" Local cCont1 := "testando texto para arquivo 1" Local cCont2 := "testando texto para arquivo 1" Local cCont3 := "testando texto para arquivo 3" MemoWrit(cFile1, cCont1) MemoWrit(cFile2, cCont2) MemoWrit(cFile3, cCont3) If CompFile(cFile1, cFile2) ? cFile1 + " é igual a " + cFile2 Else ? cFile1 + " é diferente de " + cFile2 EndIf If CompFile(cFile1, cFile3) ? cFile1 + " é igual a " + cFile3 Else ? cFile1 + " é diferente de " + cFile3 EndIf ? "fim" return Static Function CompFile(cFile1, cFile2) Local cHash1 := HB_MD5File( cFile1 ) Local cHash2 := HB_MD5File( cFile2 ) Return cHash1 == cHash2 Interessante, vou fazer alguns testes. O que vc usa quando precisa criar/deletar campo no banco de dados e ou baixar um arquivo novo de report? Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted May 10, 2023 Report Share Posted May 10, 2023 Eu criei dois programas, um que cria o ZIP com o executável, DLL, DBFs, etc a escolher o que seria apenas atualizado desses tipos de arquivos e um outro programa para o cliente para fazer esta atualização com o ZIP mas antes de faz todo um backup e atualiza os o executável, DLLs e DBf com campos novos das tabelas. Para SQL, esta atualização do banco de dados não fiz e funciona apenas executáveis e DLLs mas para as versões DBFs, funciona que é uma beleza a muito tempo. Este ano é série B no Corinthians do Kapiaba kkkkk Quote Link to comment Share on other sites More sharing options...
alex2002 Posted May 11, 2023 Report Share Posted May 11, 2023 22 horas atrás, emotta disse: Alex, seria legal você fazer um teste, mas acredito que é muito rápido obter o MD5. O importante é que não seja um processo executado a todo minuto, mas se for executado só algumas vezes por dia não terá problema. Agora se ficar lento pra você, realmente é melhor continuar checando data/hora/tamanho, mas se o usuário abre o executavel na máquina ele também faz download do executável e o executa, o que demora muito mais. Hoje em dia para o usuário abrir o seu programa (de 30mb) demora muito pra começar a executar? Então, no meu caso eu rodo o atualizador (em background) toda vez que o cara entra no sistema. Isso porque durante o dia pode ter uma bug corrigido urgentemente. Quanto a abrir o EXE não demora muito. Mas tudo isso é só para clientes que não usam a nuvem. Como hoje a maioria usa o TSPLUS a atualização é feita por nós mesmos. Quote Link to comment Share on other sites More sharing options...
alex2002 Posted May 11, 2023 Report Share Posted May 11, 2023 22 horas atrás, wanderso disse: Mas dependendo do que é alterado no sistema, não muda o tamanho do arquivo, se vc alterou um "a" por "o" no .res do sistema não muda o tamanho. Como fica neste caso? Cara, sempre muda o tamanho, porque eu mando o pacote zipado. E sempre que compilo mudando uma vírgula o tamanho muda. Já teve caso em que acidentalmente colocamos um número na variável e subimos, daí tivemos que corrigir e mudou sim o tamanho. Quote Link to comment Share on other sites More sharing options...
edutraini Posted May 11, 2023 Author Report Share Posted May 11, 2023 Bom dia, Pessoal Antes de mais nada agradecer ao Alex e Motta pelas solucoes Acabei usando o solucao do Motta pois como é só um executavel ficou bem rapido Talvez com pacotes bem grande acho que do Alex pode funcionar tambem Obrigado a todos Quote Link to comment Share on other sites More sharing options...
emotta Posted May 11, 2023 Report Share Posted May 11, 2023 2 horas atrás, alex2002 disse: Então, no meu caso eu rodo o atualizador (em background) toda vez que o cara entra no sistema. Isso porque durante o dia pode ter uma bug corrigido urgentemente. Quanto a abrir o EXE não demora muito. Mas tudo isso é só para clientes que não usam a nuvem. Como hoje a maioria usa o TSPLUS a atualização é feita por nós mesmos. Alex, se pra abrir o executável não demora, pra checar o MD5 dele vai demorar menos ainda então. Mas fica a critério de cada um usar o que resolve o problema. Abraços Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.