Para descomprimir archivos en general, ya sea con WinRAR, WinZip y otros sin componentes, lo primero que tienes que entender es que el programa principal (el IDE) no es el compresor en si, sino que es una interfaz gráfica de usuario para la consola de comandos/librerías que vienen incluidas para trabajar con la GUI. Además debes detectar la instalación del compresor y la ruta del mismo para que el programa no se cuelgue. Para saber en qué ruta está instalado WinRAR puedes hacer una rutina simple examinando las claves/valores desde el registro de Windows (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver)
Bueno... directamente con lo que requieres, debes pasarles parámetros a la consola de comandos (a rar.exe) de WinRAR para comprimir/descomprimir archivos de este tipo. La consola de comandos tiene como nombre de archivo rar.exe y se encuentra en el directorio de instalación del programa (EJ: C:\Archivos de programa\WinRAR).
Al examinar la ayuda de la consola, se despliega esto:
Código:
C:\Archivos de programa\WinRAR>rar.exe /?
Uso: rar <orden> -<parámetro 1> -<parámetro N> <archivo> <ficheros...>
<@lista de ficheros...> <ruta_de_extracción\>
<Ordenes>
a Añadir ficheros al archivo
c Añadir comentario de archivo
cf Añadir comentario de ficheros
ch Cambiar parámetros del archivo
cw Escribir el comentario de archivo en el fichero
d Eliminar ficheros del archivo
e Extraer ficheros en el directorio actual
f Actualizar los ficheros del archivo
i[par]=<str> Buscar cadena en los archivos
k Bloquear el archivo
l[t,b] Listar contenido [técnico,simple]
m[f] Mover al archivo [sólo ficheros]
p Sacar el fichero por la salida estándar
r Reparar el archivo
rc Reconstruir volúmenes perdidos
rn Renombrar ficheros comprimidos
rr[N] Añadir registro de recuperación de datos
rv[N] Crear volúmenes de recuperación
s[nombre|-] Convertir el archivo en o desde SFX
t Comprobar los ficheros de archivo
u Actualizar los ficheros en el archivo
v[t,b] Listado detallado del archivo [técnico,simple]
x Extraer ficheros con la ruta completa
<Parámetros>
- Detener el escaneo de parámetros
ac Borrar el atributo Archivo tras la compresión o extracción
ad Añadir nombre de archivo a la carpeta de destino
ag[formato] Generar el nombre de archivo usando la fecha actual
ao Añadir los ficheros con el atributo Archivo activado
ap<ruta> Establecer la ruta dentro del archivo
as Sincronizar el contendido del archivo
av Incluir Verificación de Autenticidad (sólo versiones registradas
)
av- Desactivar la comprobación de autenticidad
c- No mostrar comentarios
cfg- No leer configuración
cl Convertir los nombres a minúsculas
cu Convertir los nombres a mayúsculas
df Eliminar los ficheros tras la compresión
dh Abrir los ficheros compartidos
ds Desactivar la clasificación por nombre en los archivos sólidos
e[+]<attr> Set file exclude and include attributes
ed No añadir directorios vacios
en No añadir bloque de 'final de archivo'
ep Excluir las rutas de los nombres
ep1 Excluir el directorio raíz de los nombres
ep2 Expandir las rutas al máximo
ep3 Expandir las rutas al máximo incluyendo la letra de la unidad
f Actualizar los ficheros
hp[ctrña] Codificar cabeceras y datos
id[c,d,p,q] Disable messages
ieml[email] Enviar archivo por email
ierr Mostrar mensajes en la consola de depuración
ilog[fichero] Registrar los errores en un fichero (sólo versión registrada)
inul Desactivar todos los mensajes
ioff Apagar el PC después de finalizar la operación
isnd Activar el sonido
k Bloquear el archivo
kb Conservar los ficheros extraídos dañados
m<0..5> Establecer nivel de compresión (0-guardar ... 3-normal 5-máxima)
mc<par> Establecer parámetros avanzados de compresión
md<tamaño> Establecer el tamaño del diccionario en KB (64,128,256,512,1024,
2048,4096 ó A-G)
ms[lista] Especificar tipos de ficheros a almacenar
mt<threads> Especificar número de procesos
n<fichero> Incluir solo el fichero especificado
n@ Leer ficheros a incluir de la entrada estandard
n@<lista> Incluir los ficheros especificados en la lista de fichero
o+ Sobrescribir los ficheros existentes
o- No sobrescribir los ficheros existentes
oc Guardar atributo NTFS de compresión
or Renombrar ficheros automáticamente
os Guardar flujos NTFS
ow Guardar o restablecer el propietario y grupo del
p[contraseña] Escpcificar la contraseña
p- No preguntar la contraseña
r Recorrer recursivamente la estructura de directorios
r0 Recorrer recursivamente sólo los subdirectorios de los nombres c
on comodín
ri<P>[:<S>] Escpcificar la prioridad (0-predeterminda,1-min..15-máx) y el ti
empo de inactividad en ms
rr[N] Añadir registro de recuperación de datos
rv[N] Crear volúmenes de recuperación
s[<N>,d,e] Crear un archivo sólido
s- Desactivar la compresión sólida
sc<chr>[obj] Specify the character set
sfx[nombre] Crear un archivo SFX
si[name] Read data from standard input (stdin)
sl<size> Process files with size less than specified
sm<size> Process files with size more than specified
t Comnprobar ficheros después de comprimir
ta<fecha> Procesar ficheros modificados después de <fecha> en formato AAAA
MMDDHHMMSS
tb<fecha> Procesar ficheros modificados antes de <fecha> en formato AAAAMM
DDHHMMSS
tk Conservar la hora original del archivo
tl Establecer como hora de archivo la del último fichero
tn<fecha> Procesar ficheros posteriores a <fecha>
to<fecha> Procesar ficheros anteriores a <fecha>
ts<m,c,a>[N] Guardar o restaurar fecha y hora (modificación, creación, acceso
)
u Actualizar los ficheros
v Crear volúmenes con detección automática de tamaño o listar todo
s los volúmenes
v<tamaño>[k,b]Crear volúmenes con tamaño =<size>*1000 [*1024, *1]
vd Borrar el contenido del disco antes de crear un volumen
ver[n] Control de versión de ficheros
vn Usar nomenclatura antigua de volúmenes
vp Detenerse antes de cada volumen
w<ruta> Asignar el directorio de trabajo
x<fichero> Excluir el fichero especificado
x@ Leer ficheros a excluir de la entrada estándar
x@<lista> Excluir los ficheros especificados en la lista de fichero
y Suponer Sí a todo
z[file] Read archive comment from file
Como puedes ver en la ayuda desplegada, para lo que requieres, sería algo como esto:
Código Delphi
[-]
uses
ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'Open', 'C:\Archivos de programa\WinRAR\rar.exe', 'x C:\archivo.rar C:\carpeta_destino\', nil, SW_HIDE);
end;
Si deseas controlar toda la ejecución y sus hilos de la consola y saber qué valores devuelve al finalizar la compresión/descompresión (ExitCode), utiliza la función CreateProcess en vez de ShellExecute (consultar la ayuda de Delphi para ampliar esta información).
Saludos y buena suerte