Página 1 de 1
Atualização automática
Enviado: 23 Out 2019 11:39
por JoséQuintas
Hoje atualizo meu aplicativo, mas é de uso em rede local.
Como o EXE vém do servidor, ao atualizar o EXE todos ficam atualizados.
Uma solução pra remoto foi usar hbnetio pra esconder os dados.
Até aí... tudo bem, tudo funcionando... mas.....
Quando estiver tudo em MySQL, deixa de existir a necessidade do servidor, ou a pasta do servidor.
E principalmente o remoto vai poder ser direto pelo aplicativo.
Aí surge uma nova questão:
Cada máquina vai passar a ter seu próprio EXE.
Cada máquina vai precisar atualizar seu próprio EXE.
A origem do EXE precisa estar acessível, seja por internet ou por rede local ou por outro modo.
Por enquanto, vejo como possibilidade usar o próprio MySQL.
O MySQL vai estar acessível por todos os terminais, locais ou remoto.
O MySQL permite gravar o EXE numa tabela.
Por enquanto ainda uso DBF, e obrigatoriamente precisa de uma pasta.
E por enquanto o terminal server resolve.
Apenas já estou começando a pensar em necessidade futura, que poderia ou não usar desde já...
Alguém já fez alguma coisa nesse sentido?
Atualização automática
Enviado: 23 Out 2019 12:11
por janio
Bom, eu tbm uso MySql e faço o seguinte:
1 - Compartilho a pasta do sistema no servidor como SOMENTE LEITURA
2 - Nas estações chamo o sistema através de um .bat e crio o atalho para esse .bat (e não para o .exe)
@ECHO OFF
xcopy \\servidor\criasoftware\sistema.exe /r /y /d C:\criasoftware
START C:\criasoftware\sistema.exe
3 - Antes do .exe ser acionado, o bat verifica se o executavel do servidor tem data mais atual da que está na estação. Tendo, copia pra estação
4 - Dessa forma atualizo apenas o servidor e as estações se auto-atualização
5 - Quando ha uma atualização importante e que nenhuma estação pode continuar usando a versão antiga, eu tenho uma tabela que informo o numero da versão mais atualizada. Quando cada exe entra ele verifica se está usando a ultima. Se por algum motivo a estação não conseguiu copiar o a atualização, ao entrar no sistema eh emitido um aviso que HA VERSÃO MAIS NOVA e dali ele nao passa
6 - Tem funcionado bem em rede com até 20 estações (q eh minha experiência)
Atualização automática
Enviado: 24 Out 2019 09:30
por JoséQuintas
Os BATs não são bem aceitos do Windows 8 pra cima.
Pode ser interessante trocar o BAT por um EXE, e chamar o programa por ShellApi, pro intermediário não ocupar memória extra.
E com o EXE, vai poder usar mais recursos pra atualização.
No final a atualização vai precisar de duas partes/duas variações.
- A atualização da empresa
- A atualização dos terminais
E também algum tipo de bloqueio, pra não tentarem usar programa de versão velha em arquivos atualizados.
Pior....
As atualizações automáticas que faço...
Isso daria o poder de alguém de fora da empresa fazer atualizações, o que não é bom.
Vai precisar um bloqueio/limitação de qual máquina pode fazer atualização, ou de qual usuário.
Talvez também um cadastro de máquinas, pra definir quais máquinas podem acessar.
Estou considerando que, usando MySQL, o terminal pode estar fora da empresa, em qualquer notebook de qualquer pessoa.
É... novos recursos, novas necessidades pra segurança...
Atualização automática
Enviado: 24 Out 2019 09:54
por Itamar M. Lins Jr.
Ola!
Via TCP vc pode atualizar as maquinas que acessam o sistema. NetIO faz isso e o Letodb[f] também tem isso pronto.
Só estudar as rotinas de TCP(sockets) do Harbour.
Saudações,
Itamar M. Lins Jr.
Atualização automática
Enviado: 28 Out 2019 18:36
por JoséQuintas
Só voltando ao assunto.
Não é sobre baixar EXE, é sobre todo conjunto.
Por exemplo....
Agora pensando numa próxima necessidade:
Chamar o aplicativo em 32 ou 64 bits, conforme a máquina cliente.
Como faço backup pelo Harbour, incluindo do MySQL e ZIP.... em breve 4GB não vai ser suficiente.
Nesse caso, só tendo versões 32/64 bits pra carregar conforme terminal.
Acho que meu SJPA.EXE vai servir pra isso.
Atualização automática
Enviado: 04 Nov 2019 20:56
por Fernando queiroz
Parti da ideia de vocês e já fiz funcionar a atualização via LETODBF
do executável mais novo.
Código: Selecionar todos
#include "Directry.ch"
#include "rddleto.ch"
#include "hwgui.ch"
REQUEST LETO
REQUEST HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850
****************************************
FUNCTION MAIN( IpdaRede )
****************************************
LOCAL oExeList;
, cCaminho;
, cParam:=IpdaRede;
, icone:=HIcon():Addresource('SGC_ICON') ;
, cPathEXE:="//IPDOSERVIDORLETO:2812/";
, oExeLETO
Set( _SET_CODEPAGE, "PTISO" )
SET DATE BRITISH
SET EPOCH TO Year( Date() ) - 90
cCaminho:= hb_FNameDir( hb_ProgName() )
oExeList:=HB_Directory(cCaminho + "SGC*.EXE")
ASort( oExeList, , , { | a, b | Dtos( a[ F_DATE ] ) + a[ F_TIME ] > Dtos( b[ F_DATE ] ) + b[ F_TIME ] } )
IF ( leto_Connect( cPathEXE ) ) < 0
hwg_MsgInfo( "Erro Conectando ao Servidor de FTP: " + cPathEXE + leto_Connect_Err( .T. ), "Verifique!!!")
quit
ENDIF
IF Len( oExeList ) < 1
oExeLETO:=LETO_Directory("SGC/SGC*.EXE")
ASort( oExeLETO, , , { | a, b | Dtos( a[ F_DATE ] ) + a[ F_TIME ] > Dtos( b[ F_DATE ] ) + b[ F_TIME ] } )
// hwg_MsgInfo( cPathEXE+"SGC/"+oExeLETO[ 1, F_NAME ] + " --> " + cCaminho+oExeLETO[ 1, F_NAME ] )
Leto_FCopyFromSrv( cCaminho+oExeLETO[ 1, F_NAME ], cPathEXE+"SGC/"+oExeLETO[ 1, F_NAME ] )
ELSE
oExeLETO:=LETO_Directory(cPathEXE+"SGC/SGC*.EXE")
ASort( oExeLETO, , , { | a, b | Dtos( a[ F_DATE ] ) + a[ F_TIME ] > Dtos( b[ F_DATE ] ) + b[ F_TIME ] } )
IF Upper( oExeLETO[ 1, F_NAME ] ) != Upper( oExeList[ 1, F_NAME ] )
Leto_FCopyFromSrv( cCaminho+oExeLETO[ 1, F_NAME ], cPathEXE+"SGC/"+oExeLETO[ 1, F_NAME ] )
ENDIF
ENDIF
oExeList:=HB_Directory(cCaminho + "SGC*.EXE")
ASort( oExeList, , , { | a, b | Dtos( a[ F_DATE ] ) + a[ F_TIME ] > Dtos( b[ F_DATE ] ) + b[ F_TIME ] } )
WAPI_ShellExecute( NIL, "open", cCaminho + oExeList[ 1, F_NAME ], cParam, hb_cwd(), SW_SHOWNORMAL )
RETURN NIL
************************************************
STATIC FUNCTION hwg_Exclamation( cText )
************************************************
RETURN wapi_MessageBox( wapi_GetActiveWindow(), cText, "Atenção", MB_ICONASTERISK )
TESTADO E APROVADO, dicas do Prof. Quintas
tenho dois EXE o SSGC.EXE mostrado acima verifica se tem oSGC*.EXE mais novo e executa, se não tiver ele baixa do meu servidor a ultima versão
e executa a mais nova. muito rapido

)

)

)

)
Atualização automática
Enviado: 04 Nov 2019 21:22
por JoséQuintas
Quando saiu o Windows 8, ele não se dava bem com BATs nos atalhos.
Foi quando surgiu a idéia de usar um EXE desse jeito, escolhendo o mais novo da pasta.
Vai aparecendo a necessidade, a gente vai fazendo....
Talvez muitos tenham ficado no Windows 7 e não perceberam isso.
Atualização automática
Enviado: 04 Nov 2019 21:47
por Fernando queiroz
e para complementar a coisa criei um EXE chamado TSGC.EXE para fazer a transferência do meu LAPTOP para o servidor
Código: Selecionar todos
#include "Directry.ch"
#include "rddleto.ch"
#include "hwgui.ch"
REQUEST LETO
REQUEST HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850
****************************************
FUNCTION MAIN( TIPOCONEC )
****************************************
LOCAL oExeList;
, cCaminho;
, icone:=HIcon():Addresource('SGC_ICON') ;
, cPathEXE;
Set( _SET_CODEPAGE, "PTISO" )
SET DATE BRITISH
SET EPOCH TO Year( Date() ) - 90
IF EMPTY(TIPOCONEC)
cPathEXE:="//192.168.15.200:2812/"
ELSE
cPathEXE:="//IPR.EMO.TO.OO:2812/"
ENDIF
cCaminho:= hb_FNameDir( hb_ProgName() )
oExeList:=HB_Directory(cCaminho + "SGC*.EXE")
ASort( oExeList, , , { | a, b | Dtos( a[ F_DATE ] ) + a[ F_TIME ] > Dtos( b[ F_DATE ] ) + b[ F_TIME ] } )
IF ( leto_Connect( cPathEXE ) ) < 0
hwg_MsgInfo( "Erro Conectando ao Servidor de FTP: " + cPathEXE + leto_Connect_Err( .T. ), "Verifique!!!")
quit
ENDIF
IF hwg_MsgYesNo( "Deseja Transferir o Arquivo:"+ HB_EOL()+"De: "+cCaminho+oExeList[ 1, F_NAME ]+ HB_EOL()+"Para: "+ HB_EOL()+cPathEXE+"SGC/"+oExeList[ 1, F_NAME ] ,"Transferir para FTP" )
Leto_FCopyToSrv( cCaminho+oExeList[ 1, F_NAME ], cPathEXE+"SGC/"+oExeList[ 1, F_NAME ] )
ENDIF
RETURN NIL
************************************************
STATIC FUNCTION hwg_Exclamation( cText )
************************************************
RETURN wapi_MessageBox( wapi_GetActiveWindow(), cText, "Atenção", MB_ICONASTERISK )
Com esse eu transfiro pro meu servidor as atualizações sem precisar estar perto , com isso posso viajar e atualizar o danado remotamente
:* :* :*
Atualização automática
Enviado: 27 Nov 2019 12:06
por Nascimento
achei muito legal estou estudando este exemplo
mais uma duvida como faria para fechar o aplicativo anterior e abrir ja o novo "atualizado"?
Atualização automática
Enviado: 09 Ago 2024 14:11
por deividdjs
boa tarde prezados !
quando atualizo o cliente com o arquivos executável do servidor com a função Leto_FCopyfromSrv(cCaminho+"controle.exe",cPathLeto+"controle.exe").. ele copia o arquivo pro terminal porem não mantêm a data do arquivo original q está no servidor .. copiar com a mesma data e hora do arquivo do servidor ??
Saludos,
Deivid