В соответствии с рекомендациями Embarcadero в этом документе: VistaUACandDelphi.pdf
Uses SHFolder;
function GetSpecialFolder (CSIDL: Integer; ForceFolder: Boolean = FALSE): string;
CONST SHGFP_TYPE_CURRENT = 0;
VAR i: Integer;
begin
SetLength(Result, MAX_PATH);
if ForceFolder
then ShGetFolderPath(0, CSIDL OR CSIDL_FLAG_CREATE, 0, 0, PChar(Result))= S_ok
else ShGetFolderPath(0, CSIDL, 0, 0, PChar(Result));
i:= Pos(#0, Result);
if i> 0
then SetLength(Result, pred(i));
Result:= Trail (Result);
end;
Используйте его следующим образом:
s:= GetSpecialFolder(CSIDL_LOCAL_APPDATA, true);