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