Página 1 de 1

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

Enviado: 10 Fev 2017 17:50
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.

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

Enviado: 11 Fev 2017 14:22
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

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

Enviado: 11 Fev 2017 22:11
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

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

Enviado: 13 Fev 2017 13:14
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.