Atualização automática

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualização automática

Mensagem 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?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Atualização automática

Mensagem 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)
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualização automática

Mensagem 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...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Atualização automática

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualização automática

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Atualização automática

Mensagem 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

:)) :)) :)) :))
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualização automática

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Atualização automática

Mensagem 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
:* :* :*
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Atualização automática

Mensagem 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"?
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Atualização automática

Mensagem 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
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder