Hola,
A ver si un procedimiento tal que así puede apañarte:
Código Delphi
[-]
procedure EjecutarPrograma(rutaPrograma,
parametros: string; esperar: boolean);
var
salida: DWord;
punteroInfo: PShellExecuteInfo;
infoEjecucion: TShellExecuteInfo;
begin
with infoEjecucion do
begin
cbSize := SizeOf(infoEjecucion);
fMask := SEE_MASK_NOCLOSEPROCESS;
wnd := GetActiveWindow;
lpVerb := nil;
lpFile := PChar(rutaPrograma);
lpParameters := Pchar(parametros + #0);
lpDirectory := nil;
nShow := SW_NORMAL;
hInstApp := 0;
end;
punteroInfo:= @infoEjecucion;
ShellExecuteEx(punteroInfo);
if esperar then
repeat
salida := WaitForSingleObject(
infoEjecucion.hProcess, 500);
Application.ProcessMessages;
until (salida <> WAIT_TIMEOUT);
end;
De todos modos infórmate sobre "TShellExecuteInfo"
buscando en estos Foros o en la propia ayuda de Delphi.