Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   uso de WaitForSingleObject para hacer un instalador (https://www.clubdelphi.com/foros/showthread.php?t=30365)

crievep 04-04-2006 21:15:01

uso de WaitForSingleObject para hacer un instalador
 
Hola:
Estoy haciendo un instalador que debe ejecutar otros .EXEs, lo hago de la siguiente forma pero no espera hasta terminar la instalacion del primer exe, estos ejecutables son instaladores, y deseo que despues de presionar el boton: 'Terminar' continue la instalacion del otro, pero en realidad no se detiene:

Código Delphi [-]
// primer exe
 
    ruta := Pchar(ExtractFileDir(Application.ExeName) + '\Instaladores\Primer.exe');
    ExecInfo.cbSize := SizeOf(ExecInfo);
    ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    ExecInfo.Wnd := 0;
    ExecInfo.lpVerb := 'open';
    ExecInfo.lpFile := ruta;
    ExecInfo.lpParameters := nil;
    ExecInfo.lpDirectory := nil;
    ExecInfo.nShow := SW_NORMAL;
    ShellExecuteEx(@ExecInfo);
    WaitForSingleObject(ExecInfo.hProcess, INFINITE);:( 
   
// segundo.exe

    ruta := Pchar(ExtractFileDir(Application.ExeName) + '\Instaladores\Segundo.exe');
    ExecInfo.cbSize := SizeOf(ExecInfo);
    ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    ExecInfo.Wnd := 0;
    ExecInfo.lpVerb := 'open';
    ExecInfo.lpFile := ruta;
    ExecInfo.lpParameters := nil;
    ExecInfo.lpDirectory := nil;
    ExecInfo.nShow := SW_NORMAL;
    ShellExecuteEx(@ExecInfo);
    WaitForSingleObject(ExecInfo.hProcess, INFINITE);

De antemano gracias por la posible ayuda y correciones necesarias para solucionar esto

dec 04-04-2006 21:34:52

Hola,

Creo que deberías hacer algo parecido a esto:

Código Delphi [-]
  repeat
    salida := WaitForSingleObject(ExecInfo.hProcess, 500);
    Application.ProcessMessages;
  until (salida <> WAIT_TIMEOUT);

seoane 04-04-2006 22:13:51

Probe tu codigo y me funciona. El programa se detiene hasta que cierro el primer ejecutable y entonces se ejecuta el segundo.

Has dicho que se trata de instaladores, algunos instaladores al ejecutarse descomprimen los datos a un directorio temporal y luego ejecutan el verdadero instalador que se encontraba comprimido, cerrandose ellos mismos.

Es decir, el ejecutable que tu abres se cierra, pero el que abrio el sigue ejecutandose. Puede que ese sea el problema.

crievep 04-04-2006 23:13:30

Seguro es eso
 
Realmente el primer instalador es mysql4.1.exe, sera que debo tratar con el instalador mysql.msi? aunque no sabría como hacerlo. es decir como ejecutarlo, sera igual que con el exe?, si alguien sabe gracias

Muchas gracias por sus respuestas

andres 05-04-2006 00:26:52

hola,

no se cuales son las intenciones al realizar el instalador tu mismo, y espero que mi apunte no se salga del objetivo que persigues; por que no usas el sistema de instalacion de Nulsoft, es muy bueno, este es el que utiliza winamp, google, yahoo, Sun java web start, alcohol, ATI, Divx, entre otros, funciona con scripts y es libre, no tienes que preocuparte por la licencia para distribución.

gastelumri 05-04-2006 02:05:35

tambien...
 
Se ve muy bueno el que recomienda Andres (en una y lo pruebo) y tambien esta Inno Setup, es gratuito y con mucho soporte y utilidades de terceros, puedes utilizar dlls y pascal scripts

Saludos!!


La franja horaria es GMT +2. Ahora son las 18:29:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi