Encerrar aplicação após iniciar outro EXE com o RUN

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

Moderador: Moderadores

Cisino Junior
Usuário Nível 2
Usuário Nível 2
Mensagens: 67
Registrado em: 14 Abr 2016 13:12
Localização: Rio de Janeiro

Encerrar aplicação após iniciar outro EXE com o RUN

Mensagem por Cisino Junior »

Boa tarde!
Estou tentando fechar o programa que executa o comando RUN para executar um EXE específico. Para isso eu tentei utilizar as funções getCurrentProcessID() e terminateProcess, da seguinte forma:

No programa que vai chamar o exe com o run, eu criei uma função que grava o id do processo em um arquivo .ini. Assim:

Código: Selecionar todos

// =============================================================================
STATIC Function getProcessId() // Retorna id do processo do admPainel em memória
// =============================================================================
local processID := alltrim(str(GetCurrentProcessID())) // -> retorna id do processo atual
local cFileName:="teste.ini", 
       BEGIN INI FILE cFileName

         SET SECTION "idInfo" ENTRY "id" TO processID

       END INI

Return nil
E no programa que foi executado pelo comando RUN na outra aplicação, ao iniciar esse EXE eu leio o ini e uso a função TerminateProcess ( [ nProcessID ] , [ nExitCode ]. Assim:

Código: Selecionar todos

// =============================================================================
Function readID() // le id do admPainel salvo no ini e mata o processo
// =============================================================================
local cFileName:="painel.ini", processId:=''

       If file(cFileName)

          BEGIN INI FILE cFileName

            GET processId SECTION "idInfo" ENTRY "id"

          END INI
          fErase(cFileName)
       EndIf

       terminateProcess(id,0)

Return mil
Sendo que ao executar a função terminateProcess(id,0) ela encerra o processo(exe) que a utilizou e não o processo especificado pelo ID que foi salvo no teste.ini. Esse foi um meio que pensei em fazer o que preciso, não consegui encontrar nenhum outro que atenda minhas necessidades. Alguém sabe como me ajudar? :(

Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Encerrar aplicação após iniciar outro EXE com o RUN

Mensagem por Claudio Soto »

Me parece que el problema está en que hay que pasar un numero a TerminateProcess y se está pasando una string con el numero, al intentar en C obtener un numero de una string, hb retorna 0, y 0 para TerminateProcess significa el proceso actual.

De cualquier forma hay una manera más elegante de hacer lo que necesitas con la familia de funciones de hb_CreateProcess
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Encerrar aplicação após iniciar outro EXE com o RUN

Mensagem por JoséQuintas »

Não sei se entendi direito.
A impressão que tenho é de que precisa executar um programa, de forma que não fique preso ao atual.
Então não precisa complicar.


Dá pra fazer estilo Clipper, ou usando API Windows.
Infelizmente o fórum rejeita a mensagem quando coloco os comandos/funções direto na mensagem.
Por imagem foi.
executar.png
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/
Cisino Junior
Usuário Nível 2
Usuário Nível 2
Mensagens: 67
Registrado em: 14 Abr 2016 13:12
Localização: Rio de Janeiro

Encerrar aplicação após iniciar outro EXE com o RUN

Mensagem por Cisino Junior »

JoséQuintas escreveu:Não sei se entendi direito.
A impressão que tenho é de que precisa executar um programa, de forma que não fique preso ao atual.
Então não precisa complicar.
Quintas, funcionou perfeitamente os exemplos que você postou, muito obrigado! Eu sabia que tinha algo assim, pois em Java eu uso System.exit(0) para finalizar a aplicação, imaginei que existisse algo parecido no HMG.

Agradeço mais uma vez pela ajuda, sei que é algo bobo mas é crucial para uma implementação que fiz no sistema. Obrigado!

Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Responder