Im Prinzip hab ich diesen Code, in ButtonClick einer stinknormalen
VCL-Anwendung.
Delphi-Quellcode:
try
CreateProcess(...);
CurrControl.Process := ProcessInfo.hProcess;
//raise Exception.Create('Fehlermeldung');
case WaitForInputIdle(CurrControl.Process, Timeout)
of
//0: ;
//WAIT_TIMEOUT: RaiseLastOSError(WAIT_TIMEOUT, '.'#10'ExecuteAndWait.WaitForInputIdle');
WAIT_FAILED: RaiseLastOSError(554
{ERROR_CANT_WAIT}, '
.'#10'
ExecuteAndWait.WaitForInputIdle');
//else RaiseLastOSError(GetLastError, '.'#10'ExecuteAndWait.WaitForInputIdle');
end;
except
on E: EOSError
do begin
OutputDebugString(PChar('
ExecuteAndWait.' + E.ClassName + '
(' + E.ErrorCode.ToString + '
): ' + E.
Message));
CurrControl.CloseHandles;
CurrControl.ExitCode := E.ErrorCode;
raise;
end;
on E:
Exception do begin
OutputDebugString(PChar('
ExecuteAndWait.' + E.ClassName + '
: ' + E.
Message));
CurrControl.CloseHandles;
// CloseHandle(Process);
CurrControl.ExitCode := S_FALSE;
raise;
end;
end;
Normaler Weise müsste es im EOSError landen, aber ich bekomme immer nur eine EExternalException raus.
Zitat:
Erste Gelegenheit für
Exception bei $76EEFA92.
Exception-Klasse $C0000008 mit Meldung 'system
exception (code 0xc0000008) at 0x76d3d3c7'.
Auch direkt ein RAISE endet an selber Stelle.
Außerhalb dieses Try-Except, also direkt im OnClick, funktioniert es problemlos, wenn ich diese Exceptions auslöse.
Ich hab einfach keine Ahnung, was hier los ist, denn das
Exception-Handling selber (das von Delphi) scheint ja sonst zu funktionieren.