If you're using Halt(x), maybe look at GetExitCodeProcess? (rather than
GetLastError). Or if you want to use GetLastError, have you tried using
SetLastError before terminating your program (will only work if you're
running your sub-application in the same thread)?

Carl Reynolds                      Ph: +64-9-4154790
CJN Technologies Ltd.             Fax: +64-9-4154791
[EMAIL PROTECTED]                DDI: +64-9-4154795
PO Box 302-278, North Harbour, Auckland, New Zealand
12 Piermark Drive, North Harbour Estate, Auckland, NZ
Visit our website at http://www.cjntech.co.nz/

> -----Original Message-----
> From: John Christenhusz [SMTP:[EMAIL PROTECTED]]
> Sent: Tuesday, June 08, 1999 3:57 PM
> To:   Multiple recipients of list delphi
> Subject:      [DUG]:  Application Return Code - 2
> 
> Hi folks,
> 
> It may look like an easy one, but it isn't.
> 
> My original question was:
> 
> Can anybody tell me how to get an application to return a (DOS) Return
> Code (number) ?
> E.g. when a sub-application can't find a file, it should pass on the
> DOS
> Return Code (2) back to the main-program. But also when it fails of
> any
> sub-application specific issue, it should return its own error code
> (e.g. from number 1000 onwards).
> 
> One of the reply was 
>  Halt(x)
> 
> According to the help on Halt() it should work, but it doesn't. I've
> included the code that I use to run the EXE.
> I suppose it is not 100%.
> 
> Thank for any comment.
> 
> John Christenhusz.
> 
> function ProcessExecute(sCommandLine, sParams: string; vtRunMode:
> tRunMode; vtStartMode : tStartMode): integer;
> {Function:
>  Launch application by path\name using optional parameters.
>  This method encapsulates the call to CreateProcess()
>  Calling program is suspended till:
>  if vtRunMode = tWaitTillFinished : till after task is completed,
>  if vtRunMode = tReturnAfterStart : till after initialization is
> completed,
>  with a max of 10 seconds.
> Entry parameters:
>  sCommandLine : command line,
>  sParams : list of parameters,
>  vtRunMode : tWaitTillFinished or tReturnAfterStart.
>  vtStartMode : minimised or normal
> Returns:
>  0 if successful,
>  DOS error code if unsuccessful }
> var
>  vtStartUpInfo : TStartUpInfo; // help available under StartUpInfo
>  vtProcessInfo : TProcessInformation; // help available under
> PROCESS_INFORMATION
>  pCommandLine : array[0..255] of char;
>  pParams : array[0..255] of char;
> begin
>  if fileExists(sCommandLine) then
>  begin
>  { Clear the vtStartUpInfo structure }
>  fillChar(vtStartUpInfo, SizeOf(TStartupInfo), 0);
>  with vtStartUpInfo do
>  begin
>  cb := SizeOf(TStartupInfo); // Specify size of structure
>  dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
>  wShowWindow := SW_SHOWDEFAULT;
>  case vtStartMode of
>  tNormal : wShowWindow := sw_ShowNormal;
>  tMinimised : wShowWindow := SW_ShowMinNoActive;
>  end;
>  end;
> 
>  { Create the process by calling CreateProcess(). Detailed information
>  is provided in the Win32 online help for the TProcessInfo structure
>  under PROCESS_INFORMATION.}
>  strPCopy(pCommandLine, sCommandLine);
>  strPCopy(pParams, sCommandLine + ' ' + sParams);
> 
>  application.processMessages;
>  if createProcess(pCommandLine,
>  pParams,
>  nil,
>  nil,
>  false,
>  NORMAL_PRIORITY_CLASS or NORMAL_PRIORITY_CLASS,
>  nil,
>  nil,
>  vtStartUpInfo,
>  vtProcessInfo) then
>  with vtProcessInfo do
>  begin
>  if vtRunMode = tWaitTillFinished then
>  while waitForInputIdle(hProcess, INFINITE) = 0 do
>  application.processMessages
>  else
>  waitForInputIdle(hProcess, 10000); // wait until initialized (max 10
> seconds)
> 
>  if waitForInputIdle(hProcess, INFINITE)  -1 then
>  result := 0 // set to zero, meaning successful run
>  else
>  result := getLastError; // get error number from called EXE
> 
>  closeHandle(hThread); // free the hThread handle
>  closeHandle(hProcess); // free the hProcess handle
>  end
>  else
>  result := getLastError; // Set result to the error code.
>  end
>  else
>  result := 2; // file not found
> end;{ProcessExecute} 
> ----------------------------------------------------------------------
> -----
>     New Zealand Delphi Users group - Delphi List -
> [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz

application/ms-tnef

Reply via email to