Ahora mismo no recuerdo si Delphi incluye
ExecuteProcess, pero si es así quizá sea más efectiva que WinExec (aparte de ser más compatible

):
Código Delphi
[-]
FUNCTION Comprime (unidad_disco, ruta: STRING): INTEGER;
VAR
Parametros: ARRAY [0..2] OF STRING;
BEGIN
Parametros[0] := 'a';
Parametros[1] := 'C:\Screensshots\'+ruta+'.rar';
Parametros[2] := unidad_disco+'\Screensshots\Screens\'+ruta;
RESULT := ExecuteProcess ('C:\Archivos de programa\WinRAR\rar.exe', Parametros);
END;
De todas formas, también puedes probar ShellExecute. Aquí mismo se ha hablado largo y tendido de esta última, así que no tiene que costarte mucho encontrar información de cómo utilizarla.