Exe futtatása, és várakozás a befejezésig

Ha egy programot elindítunk a saját applikációnkból, az alábbi módon meg is várhatjuk annak befejezését. Példa: ExecAndWait('d:\nevezo.exe','');

function ExecAndWait(const Filename, Params: string):
boolean;
{$IFDEF WIN32}
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
{ Enclose filename in quotes to take care of long filenames with spaces. }
CmdLine := Filename+' '+Params;
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do
begin
cb := SizeOf(SUInfo);

dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := word(0);
end;

Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,
PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
{ Wait for it to finish. }
if Result then
begin
repeat
application.ProcessMessages;
until 0 = WaitForSingleObject(ProcInfo.hProcess, 10);
{ Clean up the handles. }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;

{$ELSE}
var
InstanceID : THandle;
Buff: array[0..255] of char;
begin
StrPCopy(Buff, Filename + ' ' + Params);
InstanceID := WinExec(Buff, WindowState);

if InstanceID < 32 then { a value less than 32 indicates an Exec error }
Result := FALSE
else begin
Result := TRUE;
repeat
Application.ProcessMessages;
until Application.Terminated;
end;
{$ENDIF}
END;