PDA

Ver la Versión Completa : Ejecutar un programa y esperar a que termine.


jplj
04-12-2008, 12:12:27
Hola:

Es un tema recurrente en el foro, pero que no me acaba de funcionar correctamente:


procedure TForm2.Button2Click(Sender: TObject);

function ExecuteProcess(ProcessName: String): Cardinal;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;

begin
Result := 0;

FillChar(StartInfo, SizeOf(StartInfo), 0);
StartInfo.cb := SizeOf(StartInfo);

if CreateProcess(
PChar(ProcessName), nil, nil, nil, false, 0,
nil, nil, StartInfo, ProcInfo)
then
Result := ProcInfo.hProcess;
end;

var
Process, i: Cardinal;

begin
Application.Minimize;
Process := ExecuteProcess(prog_7Zip.unistall);

if Process <> 0 then WaitForSingleObject(Process, INFINITE);

Application.Restore;
end;


Lo que pretendo es que el programa principal espere minimizado hasta que el usuario finalice con el que se iniciado.
Lo que me ocurre es que se minimiza el programa, se lanza el desintalador pero inmediatamente se restarura el programa principal. En este ejemplo se trata de llamar al desintalador de 7-Zip, pero me sucede no sólo con él.

También he probado con el truco 168 (http://www.clubdelphi.com/trucos/index.php?id=168&scroll=0&scrollb=168) con el mismo resultado.

Trabajo con XP y Delphi 7 / Borland Developer Estudio 2006

Muchas gracias de antemano.

seoane
04-12-2008, 14:31:44
Muchos de los programas de instalación al ejecutarlos descomprimen una serie de archivos, ejecutan alguno de los archivos que extrajo y luego se cierran dejando que el segundo ejecutable termine el trabajo. Me temo que vas a tener que buscar otra forma de controlar la desinstalación.

jplj
04-12-2008, 14:54:53
Gracias.

Al menos ahora sé porqué no funciona :(

Aquí (http://www.swissdelphicenter.ch/en/showcode.php?id=93) os dejo un enlace con algunas funciones similares por si pudieran servirle a alguien.