Atualização automática
Moderador: Moderadores
- JoséQuintas
- Administrador

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

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualização automática
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...
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/
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/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Atualização automática
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.
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.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualização automática
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.
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/
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

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Atualização automática
Parti da ideia de vocês e já fiz funcionar a atualização via LETODBF
do executável mais novo.
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
)
)
)
)
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
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualização automática
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.
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/
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

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Atualização automática
e para complementar a coisa criei um EXE chamado TSGC.EXE para fazer a transferência do meu LAPTOP para o servidor
Com esse eu transfiro pro meu servidor as atualizações sem precisar estar perto , com isso posso viajar e atualizar o danado remotamente
:* :* :*
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 ) :* :* :*
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Atualização automática
achei muito legal estou estudando este exemplo
mais uma duvida como faria para fechar o aplicativo anterior e abrir ja o novo "atualizado"?
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
- deividdjs
- 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
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
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
