Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Devolver un mensaje personalizado a GetExitCodeProcess (https://www.clubdelphi.com/foros/showthread.php?t=94838)

jars 14-08-2020 15:08:22

Devolver un mensaje personalizado a GetExitCodeProcess
 
Hola, este es mi problema.
Desde un servicio en Delphi lanzo un ejecutable con parámetros, también Delphi utilizando la funcion WinExecAndWait32 que se queda esperando hasta la finalización del programa.
Lo que sucede es que hay distintas cosas que pueden fallar de ese programa, Pej. no hay datos para el criterio seleccionado, no se pudo conectar a la bbdd, etc.
Hay alguna forma de devolver un mensaje o código personalizado para que ese servicio lo informe a la aplicación que lo esta consultando?
El desarrollo es con Delphi 7.
Gracias.

dec 14-08-2020 16:53:48

Hola a todos,

¿El programa que lanzas también lo desarrollas tú? Quiero decir, si se trata de un programa de terceros... acaso no haya manera,... al menos no mediante el "exit code", si es que dicho programa de terceros no ofrece algo así. Si el programa que lanzas es tuyo también, supongo que podrías utilizar el "exit code", mediante la variable "ExitCode". O bien hacerlo de otra manera... pienso en tomar la salida (no el "exit code") del ejecutable lanzado y a partir de ella poder determinar qué ha ocurrido... para que así el servicio que lanza al ejecutable sepa lo que tiene que hacer en momento dado.

jars 14-08-2020 17:02:00

Cita:

Empezado por dec (Mensaje 538302)
Hola a todos,

¿El programa que lanzas también lo desarrollas tú? Quiero decir, si se trata de un programa de terceros... acaso no haya manera,... al menos no mediante el "exit code", si es que dicho programa de terceros no ofrece algo así. Si el programa que lanzas es tuyo también, supongo que podrías utilizar el "exit code", mediante la variable "ExitCode". O bien hacerlo de otra manera... pienso en tomar la salida (no el "exit code") del ejecutable lanzado y a partir de ella poder determinar qué ha ocurrido... para que así el servicio que lanza al ejecutable sepa lo que tiene que hacer en momento dado.

Si, ambos programas son mios, si uso ExitCode, como lo recupero en el servicio que lo lanzo?

dec 14-08-2020 17:31:57

Hola a todos,

¿La función "WinExecAndWait32" es del API de Windows? Si no lo es... ¿puedes poner aquí el código de dicha función? Por ejemplo, en la siguiente función (tomada de SwissDelphiCenter), podemos ver el uso de "GetExitCodeProcess":

Código Delphi [-]
function WinExecAndWait32(FileName: string; Visibility: Integer): Longword;
var { by Pat Ritchey }
  zAppName: array[0..512] of Char;
  zCurDir: array[0..255] of Char;
  WorkDir: string;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  StrPCopy(zAppName, FileName);
  GetDir(0, WorkDir);
  StrPCopy(zCurDir, WorkDir);
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.dwFlags     := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil,
    zAppName, // pointer to command line string
    nil, // pointer to process security attributes
    nil, // pointer to thread security attributes
    False, // handle inheritance flag
    CREATE_NEW_CONSOLE or // creation flags
    NORMAL_PRIORITY_CLASS,
    nil, //pointer to new environment block
    nil, // pointer to current directory name
    StartupInfo, // pointer to STARTUPINFO
    ProcessInfo) // pointer to PROCESS_INF
    then Result := WAIT_FAILED
  else
  begin
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  end;
end; { WinExecAndWait32 }

jars 14-08-2020 17:49:24

Si, es la misma función que utilizo pero en el programa lanzado, al salir le pongo como ejemplo Halt(20) y en el servicio que lo lanzo tengo esto:
Código Delphi [-]
  WinExecAndWait32(cmd+' '+parm, SW_HIDE);
  i := GetLastError();
  ShowMessage(inttostr(i));

El showMessage me muestra 1813
Es decir hice el Halt(20) y recib 1813 ??

dec 14-08-2020 18:12:24

Hola a todos,

¿No deberías mirar el resultado de "WinExecAndWait32" y no el de "GetLastError"?

jars 14-08-2020 20:03:21

Exacto, tenes razón, ahí devuelve lo que corresponde.
Mil gracias.

dec 14-08-2020 20:15:52

Hola a todos,

Cita:

Empezado por jars (Mensaje 538308)
Exacto, tenes razón, ahí devuelve lo que corresponde.
Mil gracias.

¡Estupendo! :)


La franja horaria es GMT +2. Ahora son las 14:38:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi