Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejecutar un .exe (https://www.clubdelphi.com/foros/showthread.php?t=44407)

nosferatu177 06-06-2007 01:26:36

aprovechando...ejecutar archivo msi
 
hola buenas tardes, alguien de ustedes podria decirme como hacer q se ejecute un archivo .msi en el evento onclick;es q extoy haciendo un instalador y no logro hacer q se ejecute :S, ya utilice WinExec, pero creo q solo es con los .exe; gracias de antemano

roman 06-06-2007 02:50:35

¿Has probado ShellExecute?

// Saludos

JULIPO 08-08-2007 01:14:11

Muy util esta informacion
 
Pero que pasaria si ademas cuando cierre mi aplicacion, quiero saber si el programa que abri desde mi aplicacion al presionar el boton esta aun ejecutandose y si es asi cerrarlo ;

Este hilo se refiere a la ejecucion de un programa al presionar un boton;

Yo quiero saber si al cerrar mi aplicacion el programa que ejecute al presionar el boton aun esta activo y si es asi cerrarlo junto a mi aplicacion

espero sea clara la pregunta

gracias por su ayuda

Gabo 08-08-2007 17:38:33

Cita:

Empezado por JULIPO (Mensaje 221437)
Pero que pasaria si ademas cuando cierre mi aplicacion, quiero saber si el programa que abri desde mi aplicacion al presionar el boton esta aun ejecutandose y si es asi cerrarlo ;

Este hilo se refiere a la ejecucion de un programa al presionar un boton;

Yo quiero saber si al cerrar mi aplicacion el programa que ejecute al presionar el boton aun esta activo y si es asi cerrarlo junto a mi aplicacion

espero sea clara la pregunta

gracias por su ayuda

Te puede valer la función ShellExecuteEx la cual recibe como parámetro un puntero hacia una estructura de tipo SHELLEXECUTEINFO, si buscas en la ayuda encontrarás información sobre todos sus miembros, donde le puedes indicar el archivo sobre el que vas a trabajar, la acción a realizar ("open", por ejemplo), etc.

Dos miembros de esta estructura que te interesarán son fMask y hProcess. Si al primero le asignas el valor SEE_MASK_NOCLOSEPROCESS, dejará el proceso ejecutándose y el miembro hProcess recibira el "handle" del proceso.

Luego podrás preguntar por el estado del proceso...

PS: "Handle" nunca lo he traducido. ¿Cuál se les ocurre la forma más correcta de hacerlo?

cHackAll 08-08-2007 18:04:13

Hola a todos, espero no llegar muy tarde :p


Cita:

Empezado por nosferatu177 (Mensaje 206388)
hola buenas tardes, alguien de ustedes podria decirme como hacer q se ejecute un archivo .msi en el evento onclick;es q extoy haciendo un instalador y no logro hacer q se ejecute :S, ya utilice WinExec, pero creo q solo es con los .exe; gracias de antemano

Código Delphi [-]
 WinExec('msiexec /i c:\windows\system32\sasetup.msi', SW_SHOW);

Cita:

Empezado por JULIPO (Mensaje 221437)
Pero que pasaria si ademas cuando cierre mi aplicacion, quiero saber si el programa que abri desde mi aplicacion al presionar el boton esta aun ejecutandose y si es asi cerrarlo ;

Este hilo se refiere a la ejecucion de un programa al presionar un boton;

Yo quiero saber si al cerrar mi aplicacion el programa que ejecute al presionar el boton aun esta activo y si es asi cerrarlo junto a mi aplicacion

espero sea clara la pregunta

gracias por su ayuda

Código Delphi [-]
 
...
 
implementation
 
{$R *.dfm}
 
var
 si: TStartupInfo = (cb: SizeOf(TStartupInfo));
 pi: TProcessInformation;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, si, pi);
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CanClose := WaitForSingleObject(pi.hProcess, 0) = WAIT_OBJECT_0;
 if not CanClose then
  MessageBox(0, 'No puedes cerrar la aplicacion hasta que cierres el Bloc de notas', nil, 0);
end;
 
end.

Saludos.

Gabo 08-08-2007 18:30:54

Con ShellExecuteEx sería así:

Código Delphi [-]
    
    SHELLEXECUTEINFO informacion;
    ZeroMemory(&informacion, sizeof(SHELLEXECUTEINFO));
    informacion.cbSize = sizeof(SHELLEXECUTEINFO);
    informacion.fMask = SEE_MASK_NOCLOSEPROCESS;
    informacion.lpVerb = "open";                           
    informacion.lpFile = "calc.exe";
    informacion.nShow = SW_SHOWMAXIMIZED;
    ShellExecuteEx(&informacion);

Y después, preguntar con WaitForSingleObject como el código de cHackAll...


La franja horaria es GMT +2. Ahora son las 17:24:11.

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