Jump to content
Fivewin Brasil

atualizar executavel


edutraini

Recommended Posts

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

marca.jpg

Link to comment
Share on other sites

  • 4 months later...

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

marca.jpg


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

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

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

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

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

Link to comment
Share on other sites

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 icon_smile_big.gif

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

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

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

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

Link to comment
Share on other sites

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.

ariston.jpg

Conheça o Pacote Fivewin em http://www.arsoft-ap.com.br - "Leia a Bíblia diariamente"

Link to comment
Share on other sites

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

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

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

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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>

ariston.jpg

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

Link to comment
Share on other sites

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

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

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

Link to comment
Share on other sites

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

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

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>

Perfil.jpg

Link to comment
Share on other sites

  • 3 years later...

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

Link to comment
Share on other sites

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".

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...