edutraini Posted September 13, 2011 Report Share Posted September 13, 2011 Pessoal como posso fazer para o programa verificar o executavel que esta local na maquina e atualizar automaticamente caso a versao que esteja no servidor seja diferente FW24 + xharbour email :edutraini@uol.com.br Quote Link to comment Share on other sites More sharing options...
edutraini Posted September 13, 2011 Author Report Share Posted September 13, 2011 Pessoal como posso fazer para o programa verificar o executavel que esta local na maquina e atualizar automaticamente caso a versao que esteja no servidor seja diferente FW24 + xharbour email :edutraini@uol.com.br Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 13, 2011 Report Share Posted September 13, 2011 http://www.fivewin.com.br/forum/topic.asp?TOPIC_ID=16674 João Santos - São Paulo. kmt_karinha@pop.com.br joao@pleno.com.br Fone: (11) 3106-2832 / 8243-5632 - TIM FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted September 13, 2011 Report Share Posted September 13, 2011 Bom Dia Já viu isso AQUI ? Espero ter ajudado Abraços.. Luiz Arruda Corumbá-MS ico.corumba@gmail.com | http://www.facebook.com/profile.php?id=100000933378029 FiveWin 9.04 xHarbour PellesC Bcc Quote Link to comment Share on other sites More sharing options...
Marca Posted September 13, 2011 Report Share Posted September 13, 2011 Edu Depois de ver todos estes exemplos a um tempo atraz resolvi usar a coisa mais simples possivel e atendeu maravilhosamente bem a seu proposito q. é o seguinte Monte um arquivo .bat SeuExe.Bat @ECHO OFF xcopy t:\seusistemarede\seuexe.EXE /r /y /d C:\seusistemalocal onde t: é somente um exemplo do driver vc direciona p. sua unidade o xcopy com estes parametros irá comparar o .exe da rede com o .exe local e caso haja diferença ira atualizar simples assim espero q. ajude Marcelo Ferro Petrópolis - Rj Fwh9.01/xHarbour 1.1.0 Simplex /SqlLib /xMate/WS e Pelles Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted January 19, 2012 Report Share Posted January 19, 2012 citação:Edu Depois de ver todos estes exemplos a um tempo atraz resolvi usar a coisa mais simples possivel e atendeu maravilhosamente bem a seu proposito q. é o seguinte Monte um arquivo .bat SeuExe.Bat @ECHO OFF xcopy t:\seusistemarede\seuexe.EXE /r /y /d C:\seusistemalocal onde t: é somente um exemplo do driver vc direciona p. sua unidade o xcopy com estes parametros irá comparar o .exe da rede com o .exe local e caso haja diferença ira atualizar simples assim espero q. ajude Marcelo Ferro Petrópolis - Rj Fwh9.01/xHarbour 1.1.0 Simplex /SqlLib /xMate/WS e Pelles id=quote>id=quote>Legal este esquema coloquei em pratica aqui, a unica coisa ruim que fica dois icone aberto no rodape do windows, alguém saberia me dize como posso fechar o BAT depois que ele fez a chegagem e já abriu o executavel... Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104 Quote Link to comment Share on other sites More sharing options...
Luisão Posted January 19, 2012 Report Share Posted January 19, 2012 Eu ia fazer essa pergunta "E se o sistema estiver rodando ?", mas já testei aqui. Mensagem: Violação de compartilhamento /R Substitui arquivos somente leitura /Y Sobrescreve sem prompt de confirmação /D Data a comparar. Nesse caso, em branco, compara as datas dos 2 EXEs Luis Fernando Jr. (Luisão) -- FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY luis.fernando.majr@gmail.com juninho_luisao@hotmail.com (msn) Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted January 19, 2012 Report Share Posted January 19, 2012 citação:Eu ia fazer essa pergunta "E se o sistema estiver rodando ?", mas já testei aqui. Mensagem: Violação de compartilhamento /R Substitui arquivos somente leitura /Y Sobrescreve sem prompt de confirmação /D Data a comparar. Nesse caso, em branco, compara as datas dos 2 EXEs Luis Fernando Jr. (Luisão) -- FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY luis.fernando.majr@gmail.com juninho_luisao@hotmail.com (msn) id=quote>id=quote>Luisão no meu caso não vai ter um atalho do EXE do desktop do terminal somente o atalho do BAT sendo assim sempre que o usuario acionar o BAT é pq o sistema não está aberto, mais os cara são tão chato que reclamam que fica dois icone aberto, queria apagar o BAT automatico assim que executa o EXE, isto com alguma comando dentro do proprio BAT... Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104 Quote Link to comment Share on other sites More sharing options...
vagner Posted January 19, 2012 Report Share Posted January 19, 2012 Olá, Eu tenho dois executáveis, um que é para controle de versão, o que fica o Ãcone na tela e o outro é o sistema em sÃ, que é com nome diferente. /**********************************************************************************************/ /* Sistema : Sistema Principal que executa o programa da empresa */ /* Programador - Vagner Wirts */ /**********************************************************************************************/ // #include "FiveWin.ch" #Include ".\Chs\VLib.Ch" Function Main() cExecutavel := GetPvProfString("Versão","Atual","ZimaqxH20110126.Exe",".\ControleDeVersao.Cfg") cEliminarAn := GetPvProfString("Versão","Anterior"," ",".\ControleDeVersao.Cfg") If File(cExecutavel) WinExec(cExecutavel) Else MsgStop("Programa : "+cExecutavel+CRLF+"Não Localizado."+CRLF+CRLF+"Favor entrar em contato com o Programador Responsável") Endif If !Empty(cEliminarAn) FErase(cEliminarAn) Endif Quit Retu(Nil) id=code>id=code>Aà qndo eu preciso mudar de versão é só copiar o programa e alterar o "controledeversao.cfg", que quanto o usuário for entrar novamente no sistema já pega o novo, sem problema algum Vagner Wirts "Ele não sabendo que era impossÃvel, foi lá e fez" Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted January 19, 2012 Report Share Posted January 19, 2012 Ola Vagner, sua ideia é boa, o Jose Carlos tb apresentou no congresso de 2009 uma solução parecida, mais o problema é a TAL da dll da flexdocs aonde o executavel tem que estar local, desta forma sua o EXE vai chamar o outro EXE que esta no servidor dai não adianta nada... Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104 Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted January 19, 2012 Report Share Posted January 19, 2012 Eu faço assim: // Verificar se existe uma versão mais recente do EXE no servidor aDire := DIRECTORY(PastaNaRede+"\*.EXE") nFile := ASCAN(aDire, {|nPos|UPPER(nPos[1])=="SEUPROGR.EXE"}) IF nFile > 0 wdata1=aDire[nFile,3] wtime1=aDire[nFile,4] ENDIF aDire := DIRECTORY("*.EXE") nFile := ASCAN(aDire, {|nPos|UPPER(nPos[1])=="SEUPROGR.EXE"}) IF nFile > 0 wdata2=aDire[nFile,3] wtime2=aDire[nFile,4] ENDIF cDirSrv := PastaNaRede IF (WDATA1 > WDATA2) .OR. ; (WDATA1 = WDATA2 .AND. SECS(wtime1) > (SECS(wtime2)+SECS("00:15:00"))) cDirAtu := CurDrive()+":\"+GetCurDir() // Conteudo do atualiza.bat. Retire ou inclua o que voce deseja atualizar. cAtuInf := "XCOPY /Y /D "+cDirSrv+"\SEUPROGR.EXE "+cDirAtu+CRLF+; "XCOPY /Y /D "+cDirSrv+"\DLL32\*.dll "+cDirAtu+"\DLL32"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\bitmaps\*.* "+cDirAtu+"\bitmaps"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\modelos\*.* "+cDirAtu+"\modelos"+CRLF+; "XCOPY /S /Y /D "+cDirSrv+"\manual\*.* "+cDirAtu+"\manual"+CRLF+; "SEUPROGR.EXE"+CRLF+"EXIT" if file(".\ATUALIZA.BAT") ferase(".\ATUALIZA.BAT") endif arq2:=fcreate(".\ATUALIZA.BAT") fwrite(arq2, cAtuInf) fclose(arq2) SysRefresh() MsgAlert("Há uma nova versão do Sistema. Queira atualizar este micro."+CRLF+CRLF+; dtos(wdata2)+" "+wtime2+" - Esta"+CRLF+; dtos(wdata1)+" "+wtime1+" - No servidor"+CRLF+CRLF+; "Foi gerado o arquivo ATUALIZA.BAT em "+cDirAtu+" para atualizar este computador.","Incompatibilidade") ELSE ferase(".\ATUALIZA.BAT") ENDIF id=code>id=code>Desta forma, crio o atualiza.bat só se existir diferença de versão. Ele atualiza e executa o EXE. A tela do DOS é fechada automaticamente pelo EXE na primeira execução. O atualiza.bat não é executado automaticamente. Apenas um aviso é mostrado para que o usuário execute o atualiza.bat após fechar o programa. Conheça o Pacote Fivewin em http://www.arsoft-ap.com.br - "Leia a BÃblia diariamente" Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted January 19, 2012 Report Share Posted January 19, 2012 Ariston vlw pela rotina, depois irei testar ela, acho que via BAT não tem mesmo como fechar automatico, pois conforme exemplo abaixo o bat chama o EXE e ira executar o exit somente depois que fechar o EXE... @ECHO OFF xcopy z:\empre-gestor\empre-gestor.exe /r /y /d C:\empre-gestor empre-gestor exit Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104 Quote Link to comment Share on other sites More sharing options...
CIACPD Posted January 19, 2012 Report Share Posted January 19, 2012 Olá Pessoal, Para resolver a atualização de sistemas via web é só usar o exemplo do blog bielsys.blogspot.com, eu uso desde o inicio de 2010 e funciona muito bem. Daniel Segura Quote Link to comment Share on other sites More sharing options...
DonJuan Posted January 20, 2012 Report Share Posted January 20, 2012 Criei uma solução dessa forma: 1 - Compilo meu sistema com as alterações que fazem parte de uma atualização para os meus clientes 2 - atravez do proprio sistema eu gero uma produção de atualização não so do executável mais dos arquivos de fastreports, Dll´s, Imagens e o mesmo sistema envia para uma pasta de FTP na Internet 3 - O Cliente quando acessar ele irá verificar se há no endereço FTP x, uma versão mais atualizada, medidos os seguintes critérios, Tamanho, Data e Hora do Executável, dai faz uma peergunta se o Cliente Deseja atualizar o sistema, sendo sim ele vai baixar os arquivos e substituir, quanto a EXE ele irá baixar com o nomte TMP.EXE, depois de baixado ele reinicia deletando o executável antigo e renomeando o novo TMP.EXE para APLICATIVO.EXE e o executa de novo!! meus Skype alessandro.avelino citação:Pessoal como posso fazer para o programa verificar o executavel que esta local na maquina e atualizar automaticamente caso a versao que esteja no servidor seja diferente FW24 + xharbour email :edutraini@uol.com.br id=quote>id=quote>Acesse: http://programafontefivewin.blogspot.com/ FHW 10.8, XHB1.2.1, PELLESC 6.5, XDEV 7.2, FASTREPORT, SQLRDD, MySql, Firebird, Postgres "MIGRE SEUS SISTEMAS EM CLIPPER PARA 32BITS COM BANCOS SQL" Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted January 20, 2012 Report Share Posted January 20, 2012 Para fechar o prompt de comando, chame esta função no ON INIT da sua WINDOW ou DIALOG. Exemplo: ACTIVATE DIALOG oDlg ON INIT (oDlg:Show(), CloseCmdPrompt(oDlg:hWnd)) *-----------------( Fecha o prompt de comando do DOS )-------------------------* #define GW_HWNDFIRST 0 #define GW_HWNDNEXT 2 FUNCTION CloseCmdPrompt(hMWnd) LOCAL ahWnd := {} LOCAL hWnd := GETWINDOW(hMWnd, GW_HWNDFIRST ) While hWnd != 0 If "CMD.EXE" $ UPPER(GETWINDOWTEXT( hWnd )) AADD( ahWnd, hWnd ) EndIf hWnd = GETWINDOW( hWnd, GW_HWNDNEXT ) End IF LEN(ahWnd) > 0 Aeval(ahWnd,{|hWnd| (PostMessage(hWnd,WM_CLOSE,0,0), SysRefresh()) }) ENDIF Return(nil) id=code>id=code> Conheça o Pacote Fivewin em http://www.arsoft-ap.com.br - "Leia a BÃblia diariamente" Editado por - j_arist on 20/01/2012 10:59:30 Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted January 20, 2012 Report Share Posted January 20, 2012 Ariston obrigado com sua dica acima ficou 100%, vlw... Aos demais amigo agradeço pelas dicas, mais hoje já faço update via FTP mais somente no servidor, o que queria era uma forma pratica de atualizar o executaveis nos terminais dentro da rede interna... Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104 Quote Link to comment Share on other sites More sharing options...
Theotokos Posted January 23, 2012 Report Share Posted January 23, 2012 citação:Ariston vlw pela rotina, depois irei testar ela, acho que via BAT não tem mesmo como fechar automatico, pois conforme exemplo abaixo o bat chama o EXE e ira executar o exit somente depois que fechar o EXE... @ECHO OFF xcopy z:\empre-gestor\empre-gestor.exe /r /y /d C:\empre-gestor CALLid=red>empre-gestor exit Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 FWH 9.12,XHARBOUR 1.2,ADS 9.0 / FWH1104 id=quote>id=quote> Quote Link to comment Share on other sites More sharing options...
Marca Posted December 3, 2015 Report Share Posted December 3, 2015 Olá Pessoal, Para resolver a atualização de sistemas via web é só usar o exemplo do blog bielsys.blogspot.com, eu uso desde o inicio de 2010 e funciona muito bem. Daniel Segura Olá Daniel, bom dia Poderia compartilhar sua solução ? Quote Link to comment Share on other sites More sharing options...
fladimir Posted December 3, 2015 Report Share Posted December 3, 2015 Marcelo, acredito q a solução no blog q ele falou se refere a este link []´s Quote Link to comment Share on other sites More sharing options...
Marca Posted December 4, 2015 Report Share Posted December 4, 2015 Marcelo, acredito q a solução no blog q ele falou se refere a este link []´s Olá fladimir. Sim, estou usando esta rotina mesmo sendo q. o meu problema é que este exemplo mostrado ai é para um outro sistema que fica em tray verificando se a versão esta ataulizada ou não. Eu consigo usar parte dela mais oq. eu queria fazer seria testar isso exatamente do .exe que estou rodando Digo Executo meu sistema Marca.Exe Consigo rodar esta rotina , vou no meu ftp pego a atualização Marca.Rar e até ai tudo bem, sendo que agora vem o problema : Eu preciso tirar meu Marca.exe de execução renomear ele para Marca.Ant e descompactar o novo Marca.Rar para Marca.exe mas como ele esta em execução não consigo. questa sendo executado de um Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted December 4, 2015 Report Share Posted December 4, 2015 Eu faço assim: no servidor, onde estar a base de dados,tenho uma pasta que a denomino "NOVAVER". Nessa pasta guardo a ultima versão que atualizo, presencialmente ou remotamente, de modo que para atualizar a versão do usuário, faço o seguinte no fonte principal do meu aplicativo: aUPGRADF := DIRECTORY("&cDRIVE\SISCOM\NOVAVER\SGCW.EXE") aUPGRADC := DIRECTORY("C:\SISCOM\SGCW.EXE") // cada usuario executa do disco local IF LEN(aUPGRADF) > 0 .AND. LEN(aUPGRADC) > 0 IF !LEFT(aUPGRADF[1,4],5) == LEFT(aUPGRADC[1,4],5) VLINHAS := CHR(13)+CHR(10) VLINHAS += "COPY &cDRIVE\SISCOM\NOVAVER\SGCW.EXE C:\SISCOM" + CHR(13)+CHR(10) VLINHAS += 'DEL "' + GETENV("USERPROFILE") +'\DESKTOP\INSTALA_MS.BAT"' + CHR(13)+CHR(10) MEMOWRIT( GETENV("USERPROFILE") + "\DESKTOP\Instala_Ms.bat",VLINHAS) IF MsgNoYes("Foi detectada um nova versão do sistema no seu" + CRLF + ; "servidor de arquivos. Versão atual: "+aUPGRADC[1,4] +" Nova versão "+CRLF + ; aUPGRADF[1,4] + CRLF + ; "Deseja instalar agora ?",'Confirmação') QUIT ENDIF ENDIF ENDIF aUPGRADF := aUPGRADC := "" RELEASE aUPGRADC RELEASE aUPGRADF ... Note que o aplicativo executado "SGCW.EXE" fica em uma pasta do disco local, no meu caso a pasta "Siscom", para onde o arquivo em lote criado na área de trabalho "INSTALA_MS.BAT" irá copiar a partir da pasta NOVAVER a nova versão disponibilizada, caso o usuário confirme e em seguida, execute esse atalho. "cDrive" é a unidade de disco onde estar a base de dados e também a pasta contendo a nova versão, no meu caso sempre mapeio como "H". Ronaldbuch 1 Quote Link to comment Share on other sites More sharing options...
fladimir Posted December 5, 2015 Report Share Posted December 5, 2015 Olá fladimir. Sim, estou usando esta rotina mesmo sendo q. o meu problema é que este exemplo mostrado ai é para um outro sistema que fica em tray verificando se a versão esta ataulizada ou não. Eu consigo usar parte dela mais oq. eu queria fazer seria testar isso exatamente do .exe que estou rodando Digo Executo meu sistema Marca.Exe Consigo rodar esta rotina , vou no meu ftp pego a atualização Marca.Rar e até ai tudo bem, sendo que agora vem o problema : Eu preciso tirar meu Marca.exe de execução renomear ele para Marca.Ant e descompactar o novo Marca.Rar para Marca.exe mas como ele esta em execução não consigo. questa sendo executado de um Talvez não seja a melhor opção o q vou dizer, mas eu entendi q vc não esta conseguindo renomear o teu sistema ou deletar pra rodar a nova versão pq esta em execução correto? E se vc dar um Kill no processo do teu sistema não resolveria? Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted December 5, 2015 Report Share Posted December 5, 2015 O modo como uso atualmente foi melhorado. Comparo pelo MD5 do executável no servidor. Dou um TASKILL no EXE local para garantiar a atualização. Após a copia abro o EXE atualizado com START para a tela do DOS não ficar aberta. Uso instrução em INI para veriricar automaticamente a base de dados local após a atualização. Reveja abaixo e vê se dá para aproveitar alguma coisa. // Descomente as 3 linhas abaixo para checar por MD5 (Comente o teste por data e hora) cMd5This := HB_MD5File( cExeName ) cMd5That := HB_MD5File( cDirSrv+"\"+cExeName ) IF cMd5This != cMd5That // Vai atualizar cDirAtu := CurDrive()+":\"+CurDir() if file(cDirAtu+"\ATUALIZA.BAT") ferase(cDirAtu+"\ATUALIZA.BAT") endif WritePProString("ACESSOS", "ChecarDbf", "T", ".\SISCOM.INI") cAtuInf := "TASKKILL /IM "+cExeName+" /F"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\bitmaps\*.* "+cDirAtu+"\bitmaps\"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\bitmaps\papel\*.* "+cDirAtu+"\bitmaps\papel\"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\modelos\*.* "+cDirAtu+"\modelos\"+CRLF+; "XCOPY /S /Y /D "+cDirSrv+"\manual\*.* "+cDirAtu+"\manual\"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\DLL32\*.dll "+cDirAtu+"\DLL32\"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\*.dll "+cDirAtu+"\"+CRLF+; "XCOPY /Y /D "+cDirSrv+"\"+cExeName+" "+cDirAtu+CRLF+; "START "+cExeName+CRLF+; "EXIT" arq2 := fcreate(cDirAtu+"\ATUALIZA.BAT") fwrite(arq2, cAtuInf) fclose(arq2) WAITRUN( GetEnv( "ComSpec" )+" /C START "+cDirAtu+"\ATUALIZA.BAT", 0 ) SYSWAIT(3) ELSE // Não precisa atualizar. Exclui o ATUALIZA.BAT se existir. IF FILE(".\ATUALIZA.BAT") ferase(".\ATUALIZA.BAT") ENDIF ENDIF Quote Link to comment Share on other sites More sharing options...
fladimir Posted December 5, 2015 Report Share Posted December 5, 2015 Ariston, a forma q vc usa seria um mix do q o Marca falou e a sugestão do Kill q eu falei... blz entendi, mas minha dúvida é se isso é executado por um EXE q fica tipo no tray monitorando ou se teu app fica verificando... Acredito q pela forma disposta no código q vc apresentou seja em um EXE externo, mas a dúvida seria, pelo q entendi q ele perguntou, é se vc ou alguém conhece uma forma de fazer isso a partir do próprio EXE. Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted December 5, 2015 Report Share Posted December 5, 2015 No próprio EXE. • Gravo em DBF local o endereço do executável no servidor: Exemplo: \\servidor\siscom • Antes do menu principal executo a codificação acima. Portanto, isso é feito no momento da execução do programa. Como você pode ver, basta inserir o código acima em algum ligar antes do seu menu principal. Atribua à variável "cDirSrv" o endereço (pasta compartilhada) do seu EXE no servfidor e à "cExeName" o nome do seu executável. Para mais detalhes me chame pelo Whats: 9691281920 (Sem o 9 adicional) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.