Jump to content
Fivewin Brasil

Atualizar Versao do Sistema


edutraini

Recommended Posts

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

 

 

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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ê.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...