PDA

Ver la Versión Completa : Ejecutar archivos CAB desde Delphi


Pablo Carlos
08-03-2005, 21:50:27
Hola gente... para ejecutar otra aplicación desde delphi podemos usar los siguiente:

WinExec(PChar('C:\LocalizaciónExe\exe'), SW_SHOWNORMAL);

Hasta aqui todo bien... ahora para un archivo de windows tipo CAB (esas cajitas...) no funciona el WinExec...
1.- alguien sabe porqué y cómo ejecutarlos desde mi prg. (Este archivo estaría alojado en la lectora de cd junto al setup del prg) :confused:
2.- ¿Se puede alojar en mi setup esos archivos cab y al instalar el prg se instale los cab? :confused:
Muchas gracias... saludos

Neftali [Germán.Estévez]
09-03-2005, 09:26:13
Hasta aqui todo bien... ahora para un archivo de windows tipo CAB (esas cajitas...) no funciona el WinExec...
1.- alguien sabe porqué y cómo ejecutarlos desde mi prg. (Este archivo
estaría alojado en la lectora de cd junto al setup del prg) :confused:

2.- ¿Se puede alojar en mi setup esos archivos cab y al instalar el prg se instale los cab?
Los archivos CAB no son ejecutables, por lo tanto no se "deberían" ejecutar o instalar como comentas. Los CAB son archivos comprimidos, por lo tanto debes tener una utilidad de descompresión asociado a descomprimirlos, pero no funcionará directamente.

Si buscas por interner existen muchos componentes que permiten descomprimir ficheros CAB; Por ejemplo:

http://www.ziptv.com/
o éste
http://sourceforge.net/projects/tpabbrevia/

Pablo Carlos
10-03-2005, 22:22:44
Gracias por responder...
Los archivos CAB no son ejecutables

Totalmente de acuerdo

por lo tanto no se "deberían" ejecutar o instalar como comentas

Pero haciendole doble click en el archivo se ejecutan como un exe

Los CAB son archivos comprimidos, por lo tanto debes tener una utilidad de descompresión asociado a descomprimirlos.

y... eso... como asocia Windows al hacerle doble click?
Abria que investigar por alli... me meto en ese tema... si lo encuentro lo hare saber...
Saludos Pablo

argami
11-03-2005, 14:17:07
el tema de las asociaciones es como un fichero txt que de por si no hace nada pero si tu haces dblclick te abre el notepad.

si lo que quieres es abrir un fichero segun su asociacion usa la funcion ShellExecute de la api en Delphi 7 creo recordar que esta en ShellApi.

Ejemplo:
ShellExecute(Handle, 'open', 'C:\Pathfichero.cab', nil, nil, SW_SHOWNORMAL);

espero que esto te ayude.

PD: si quieres revisar con que esta asociado tu programa en opciones de carpeta (en cualquier ventana del windows en herramientas) tienes una pestaña que se llama tipos de archivo puedes buscar el cab dentro de la lsta.

Pablo Carlos
13-03-2005, 17:35:27
Prometido y cumplo...
De esta manera ejecuto e instalo los .CAB


procedure TfrmPath.InstalarAgente;
procedure RunAndWaitShell(Ejecutable,
Argumentos:string
;Visibilidad:integer);
var
Info:TShellExecuteInfo;
pInfo:PShellExecuteInfo;
exitCode:DWord;
begin
pInfo:=@Info;
with Info do
begin
cbSize:=SizeOf(Info);
fMask:=SEE_MASK_NOCLOSEPROCESS;
wnd:=Handle;
lpVerb:=nil;
lpFile:=PChar(Ejecutable);
lpParameters:=Pchar(Argumentos+#0);
lpDirectory:=nil;
nShow:=Visibilidad;
hInstApp:=0;
end;
ShellExecuteEx(pInfo);
repeat
exitCode := WaitForSingleObject(Info.hProcess,500);
Application.ProcessMessages;
until (exitCode <> WAIT_TIMEOUT);
end;
begin
RunAndWaitShell('c:\Genie','', Sw_ShowNormal);
RunAndWaitShell('c:\MSagent','', Sw_ShowNormal);
end;


Gracias a todos los que respondieron
Saludos bye