estoy tratando de iniciar una aplicación externa con estatus elevado, y esperar hasta que salga antes de continuar:¿Cómo uso correctamente el método WaitForSingleObject para esperar a que termine un programa externo?
var
FProcess: THandle;
ExecInfo: TShellExecuteInfo;
begin
FillChar(ExecInfo, SizeOf(ExecInfo), 0);
with ExecInfo do
begin
cbSize := SizeOf(ExecInfo);
fMask := 0;
Wnd := AWindow;
lpVerb := 'runas';
lpFile := PChar(APath);
lpParameters := PChar(AParams);
lpDirectory := PChar(AWorkDir);
nShow := SW_NORMAL;
end;
Result := ShellExecuteEx(@ExecInfo);
if Wait then
begin
while WaitForSingleObject(ExecInfo.hProcess, INFINITE) <> WAIT_TIMEOUT do
Application.ProcessMessages;
end;
Esta lanza, pero sólo sigue esperando. El programa que llama nunca continúa después de la llamada a WaitForSingleObject, incluso después de que el programa llamado sale.
He intentado WAIT_OBJECT_0 en lugar de WAIT_TIMEOUT, pero tengo el mismo problema. ¿Qué estoy haciendo mal aquí?
¿Qué proceso ¿Está intentando ejecutar? ¿Estás seguro de que tuvo éxito? Si lo hizo, ¿está seguro de que tiene un identificador válido? Hay muchas cosas que podrían salir mal en ese código antes de llegar a la parte sobre la que pregunta. Asegúrate de preguntar sobre lo correcto. Y si la llamada WaitForSingleObject regresa, claramente no está devolviendo Wait_Timeout; entonces, ¿qué * está * volviendo? –