Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ejecutar un exe y esperar a que acabe.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ejecutar un exe y esperar a que acabe. Responder citando

Hola a todos.
Como puedo hacer para que mi programa lance un archivo del tipo setup.exe y se espere a que acabe para seguir con el proceso?
Es que el siguiente paso es de configuración, y si no está instalado me dará problemas.
Salu2 y gracias.
Volver arriba
Mensaje    Asunto: Ejecutar un exe y esperar a que acabe. Responder citando

HOla:
Por aca te mando un codigo que me mandaron.
Es muy practico, pero hay que ponerle atencion.
Hola.

No se si es exactamente lo que quieres. Te mando un ejemplo de cómo ejecutar
una aplicación DOS desde otra Windows, y que esta ultima espere a que
termine la anterior antes de seguir.

Para hacer eso, se escriben dos funciones:
- Shell, una función que ejecuta la aplicación DOS y devuelve el número de
proceso para controlar el estado de la ejecución.
- ExecCmdNoFocus, es una función que llama a Shell y se mantiene en un
bucle hasta que finaliza la aplicación DOS.

//--------------------------------------------------------------------------
----------------------------------------------------------
DWORD __fastcall Shell(LPTSTR PathName, LPTSTR lpInitialDir, WORD
WindowStyle)
{
// Parametros: PathName = ruta y nombre de la aplicación DOS
// lpInitialDir = ruta de la carpeta de trabajo
// WindowStyle = Estilo de la ventana en que se ejecuta
la app. DOS

STARTUPINFO si;
PROCESS_INFORMATION pi;
LPVOID lpvEnv;

// Get a pointer to the environment block.

lpvEnv = GetEnvironmentStrings();

// Variable strings are separated by NULL byte, and the block is
// terminated by a NULL byte.

ZeroMemory(&si, sizeof(STARTUPINFO));
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = WindowStyle;
si.cb = sizeof(si);


CreateProcess(NULL, PathName, NULL, NULL, false, 0, lpvEnv, lpInitialDir,
&si, &pi);
return (pi.dwProcessId);

}
//--------------------------------------------------------------------------
-
//Un procedimiento para ejecutar y esperar a que termine
void ExecCmdNoFocus(LPTSTR CmdLine)
{
// Parametro: CmdLine = ruta y nombre de la aplicación DOS.

//Esperar a que un proceso termine,
//la ventana se mostrará minimizada sin foco
HANDLE hProcess;
DWORD RetVal;

//The next line launches CmdLine as icon,
//captures process ID
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,
Shell(CmdLine, NULL, SW_SHOWMINNOACTIVE));
do
{
//Get the status of the process
GetExitCodeProcess(hProcess, &RetVal);
//Sleep command recommended as well
//as DoEvents
Application->ProcessMessages();
Sleep(100);
}
//Loop while the process is active
while (RetVal == STILL_ACTIVE);
}
//--------------------------------------------------------------------------
-

Para ejecutarlo, genera una nueva aplicación con un TButton (Button1) y un
TMemo (Memo1)

//--------------------------------------------------------------------------
---
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString sParams;

sParams = "command /c dir c:\\*.* /s > c:\\dir.txt";
// Si se prueba en Windows NT / 2000, poner
// sParams = "cmd /c dir c:\\*.* /s > c:\\dir.txt";

Screen->Cursor = crHourGlass;
ExecCmdNoFocus(sParams.c_str());
Screen->Cursor = crDefault;

Memo1->Lines->LoadFromFile("c:\\dir.txt");
}
//--------------------------------------------------------------------------
-

Jorge Miquélez Echegaray
jorge.miquelez@avanzit.com


Volver arriba
Mensaje    Asunto: Ejecutar un exe y esperar a que acabe. Responder citando

Gracias por la respuesta.
El código me ha ido genial.
También funciona para ejecutar programas bajo Windows.
Salu2.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.