Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
Delphi 2010 Professional
|
Re: Probleme mit WaitForSingleObject
21. Dez 2006, 17:05
Hi,
versuchs mal so:
Delphi-Quellcode:
function tForm1.WinExecAndWait32(const Path: string; Visibility: Word): Boolean;
var
lpExitCode: Cardinal;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
bIsSetup: boolean;
iCnt: integer;
iFind: integer;
begin
bIsSetup := pos('setup.exe', lowercase(path)) > 0;
{ clear StartupInfo }
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
{ enter startup information }
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
wShowWindow := visibility; {you could pass sw_show or sw_hide as parameter}
end;
{ create new process }
if CreateProcess(nil, pChar(path), nil, nil, False, NORMAL_PRIORITY_CLASS,
nil, nil,
StartupInfo, ProcessInfo) then
begin
{ sucess }
WaitForInputIdle(ProcessInfo.hProcess, 3000);
{ wait until application finished }
repeat { until lpExitCode <> Still_Active }
sleep(0);
application.processmessages;
GetExitCodeProcess(ProcessInfo.hProcess, lpExitCode);
until lpExitCode <> Still_Active;
with ProcessInfo do
{not sure this is necessary but seen in in some code elsewhere}
begin
CloseHandle(hThread);
CloseHandle(hProcess);
end; { with ProcessInfo do }
end;
Das verwende ich schon lange und es funktioniert sehr zuverlässig.
Gruss
|
|
Zitat
|