Não consigo atualizar executável.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Não consigo atualizar executável.

Mensagem por porter »

Olá pessoal, sempre utilizei a rotina abaixo para atualizar o Executável mesmo que as estações estivessem acessando o sistema,
mas para usar a nova versão, tinha que sair do sistema e entrar novamente, de um tempo para cá está dando a mensagem:
"O arquivo já está sendo usado por outro processo"

Porque não consigo mais atualizar o executável, voces conhecem uma forma melhor ?, obrigado.

Código: Selecionar todos

If hb_FileExists("C:\ESTOQUE\ATUALIZA.EXE")
   ! del loja.old
   ! ren loja.exe *.old
   ! ren atualiza.exe loja.exe
   MENSAGEM("Atualizado !")
endif
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

Não consigo atualizar executável.

Mensagem por Jairo Maia »

Olá Porter,

Você trocou o título, mas isso já está sendo discutido aqui: comando File falhando para ver se arquivo existe
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Não consigo atualizar executável.

Mensagem por porter »

olá Jairo,
O problema está acontecendo no momento de renomear atualiza.exe para loja.exe, a verificação se o arquivo ATUALIZA.EXE existe, está dando certo,
no momento que tento atualizar está dando a seguinte mensagem:
"O arquivo já está sendo usado por outro processo"

Gostaria de renomear o arquivo, mesmo com as estações acessando o sistema, sempre usei essa rotina e deu certo, agora não consigo atualizar,
tenho que fechar o sistema em todas as estações para fazer a atualização.

Código: Selecionar todos

If hb_FileExists("C:\ESTOQUE\ATUALIZA.EXE")
	   ! del loja.old
	   ! ren loja.exe *.old
	   ! ren atualiza.exe loja.exe   --> O arquivo já está sendo usado por outro processo
	   MENSAGEM("Atualizado !")
endif
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Não consigo atualizar executável.

Mensagem por JoséQuintas »

Aceita sugestão? Esqueça essa forma.

Crie um BAT, e vá trocando o nome dentro do BAT.
Ou através de um EXE intermediário, que execute o EXE mais atual.

E tente apagar tudo que sobrar.

lojannn.exe

Assim não precisa renomear EXE.

E um EXE intermediário que vai testar loja*.exe, e executar o EXE mais atual.

Assim fica simples e prático.

Em caso de falha no automático, dá até pro usuário baixar direto do site e salvar na pasta.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Não consigo atualizar executável.

Mensagem por porter »

olá JoseQuintas,
Se o executável intermediário executar o atual, posso mudar o atual sempre porque o
que estará sendo usado por outro processo é o intermediário ?
É assim que funciona ?
Não sei se consegui explicar.

obrigado.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Não consigo atualizar executável.

Mensagem por JoséQuintas »

Não.
O intermediário nunca se altera. (ou BAT sendo alterado)
E o EXE normal vai ter um nome diferente a cada atualização.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Não consigo atualizar executável.

Mensagem por porter »

olá, criei um arquivo .bat que executa intermediario. exe que por sua vez executa LOJA001.EXE ou LOJA002.EXE, pois estará sempre mudando,
seria isso ?
obrigado.

acessar.bat
==========

Código: Selecionar todos

f:\estoque\intermediario.exe

intermediario.prg
===============

Código: Selecionar todos

FUNCTION INTERMEDIARIO
   RUN LOJA001.EXE  <---  aqui muda o nome a cada atualização pode ser LOJA001.EXE, LOJA002.EXE...
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Não consigo atualizar executável.

Mensagem por JoséQuintas »

Não. O EXE intermediário será fixo, senão vai continuar com o mesmo problema pra atualizar.

Opção 1: um BAT
Nesse bat chama loja1.exe, loja2.exe, loja3.exe
Cada vez que atualizar, o EXE altera o nome dentro do BAT, e grava o EXE com o nome novo.

Na minha máquina esta assim:

Código: Selecionar todos

@ECHO OFF
CLS
START D:\CDROM\FONTES\INTEGRA\JPA.EXE %1 %2 %3 %4 %5
REM EXIT
Esse nome JPA.EXE pode ser alterado pra JPA2.EXE, JPA3.EXE, JPA4.EXE.
Trata-se de alterar o BAT, e salvar o EXE com o respectivo nome.


Opção 2: um EXE intermediário
Neste caso o EXE executa o mais novo, e o atalho será direto pra este EXE.

Criei este EXE, que nunca vai se alterar, como intermediário.

Código: Selecionar todos

/*
sjpa - intermediário pra carga do EXE final
*/

REQUEST HB_Codepage_PTISO

#include "directry.ch"
#include "hbwin.ch"

PROCEDURE Main( cmdParam1, CmdParam2, cmdParam3, cmdParam4, cmdParam5 )

   LOCAL oExeList, cPath

   Set( _SET_CODEPAGE, "PTISO" )
   SET DATE BRITISH
   SET EPOCH TO Year( Date() ) - 90

   cPath := hb_Argv(0)
   cPath := Left( cPath, Rat( "\", cPath ) )
   cmdParam1 := iif( cmdParam1 == NIL, "", cmdParam1 )
   cmdParam2 := iif( cmdParam2 == NIL, "", cmdParam2 )
   cmdParam3 := iif( cmdParam3 == NIL, "", cmdParam3 )
   cmdParam4 := iif( cmdParam4 == NIL, "", cmdParam4 )
   cmdParam5 := iif( cmdParam5 == NIL, "", cmdParam5 )

   oExeList := Directory( cPath + "JPA*.EXE" )

   IF Len( oExeList ) == 0
      MsgExclamation( "Não encontrado EXE na pasta " + cPath )
      RETURN
   ENDIF

   ASort( oExeList, , , { | a, b | Dtos( a[ F_DATE ] ) + a[ F_TIME ] > Dtos( b[ F_DATE ] ) + b[ F_TIME ] } )
   // MsgExclamation( "Executando " + oExeList[ 1, F_NAME ] )
   WAPI_ShellExecute( NIL, "open", cPath + oExeList[ 1, F_NAME ], cmdParam1 + " " + cmdParam2 + " " + cmdParam3 + " " + cmdParam4 + " " + cmdParam5, hb_cwd(), SW_SHOWNORMAL )

   RETURN

FUNCTION MsgExclamation( cText )

   wapi_MessageBox( wapi_GetActiveWindow(), cText, "Atenção", WIN_MB_ICONASTERISK )

   RETURN NIL
Explicação:
O EXE intermediário vai testar e executar o EXE mais novo da pasta.
Só precisa decidir qual será o prefixo do EXE em questão.
No meu caso uso JPAxxxx.EXE
Se salvou um EXE novo como JPAxxxx.exe, ele vai passar a ser o novo EXE chamado, automaticamente.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Não consigo atualizar executável.

Mensagem por porter »

Bom dia JoséQuintas, estou compilando com o xHarbour:
xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6633)

Estou tentando executar a rotina para entender, está dando erro de compilação nessa linha 8:
#include "hbwin.ch"

Error F0029 Can't open #include file: 'hbwin.ch'

Tem como usar a rotina que você passou compilando com xHarbour ?

Obrigado.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Não consigo atualizar executável.

Mensagem por JoséQuintas »

Eu já disse o que faz a rotina:
Basicamente é pegar a lista de EXEs, e escolher o que tem data mais nova pra executar.

1. Directory() ou algo assim pra pegar a lista de EXEs

Deve ter diversas rotinas suas que fazem isso

2. Colocar em ordem, ou apenas pegar o EXE mais novo

Deve ter diversas rotinas suas que fazem isso

3. Executar o EXE mais novo, respeitando o diretório/pasta atual, sem deixar o EXE preso.

Deve ter alguma rotina sua que faça isso.

Nota:
Retire esse #include pra ver aonde ele faz falta, é onde terá que alterar.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1058
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Não consigo atualizar executável.

Mensagem por porter »

A rotina está dando certo, executei passo a passo e entendi como funciona, apenas na hora de executar o EXE mais novo, não consigo compilar, estou tentando com uma pequeno comando para executar calculadora mas também da erro de compilação, sempre usei apenas o comando (run rotina.exe), se conseguir, volto a postar o resultado, obrigado pela atenção.

WAPI_ShellExecute( NIL, "open", cPath + oExeList[ 1, F_NAME ], cmdParam1 + " " + cmdParam2 + " " + cmdParam3 + " " + cmdParam4 + " " + cmdParam5, hb_cwd(), SW_SHOWNORMAL )

ShellExecuteEx("calc.exe",nil)
Responder