hi,
ich starte auf meinem Programm heraus mit CreateProcess ein Programm und warte darauf, dass dieses erst beendet ist, bevor ich weiter mache.
Mein Problem ist nun folgendes. Es kann nun vorkommen, das mein gestartetes Programm Probleme und nicht beendet wird aus welchen Gründen auch immer. Im Ausgangprogramm warte ich also ewigkeiten darauf, dass sich das Programm beendet und wenn ich Pech habe, tut es dann nicht.
Ich möchte nun angeben, dass wenn sich das Programm nicht freiwillig nach, sagen wir mal 1000 Sekunden, beendet hat, dann soll es eben Zwangsweise beendet werden.
Wie erreiche ich das?
Bisher habe ich das:
Delphi-Quellcode:
if CreateProcess(nil, // lpApplicationName
PChar(CmdLine), // lpCommandLine
nil, // lpProcessAttributes
nil, // lpThreadAttributes
false, // bInheritHandles
0, // dwCreationFlags
nil, // lpEnvironment
nil, // lpCurrentDirectory
StartupInfo, // lpStartupInfo
ProcessInformation then // lpProcessInformation)
begin
// Warteprozess geändert
{$IFDEF USEWFO}
WFO := TWaitForObject.Create(true);
WFO.hProcess := ProcessInformation.hProcess;
WFO.Finished := false;
WFO.Resume;
while not WFO.Finished do
begin
Sleep(1000);
Application.ProcessMessages;
end;
//WFO.Suspend;
WFO.Terminate;
WFO.Resume;
WFO.WaitFor;
WFO.Free;
{$ELSE}
repeat
WaitResult := WaitForSingleObject(ProcessInformation.hProcess,
1000);
Application.ProcessMessages;
until WaitResult = WAIT_OBJECT_0;
{$ENDIF}
Application.ProcessMessages;
CloseHandle(ProcessInformation.hProcess);
CloseHandle(ProcessInformation.hThread);
end;