El problema de encontrar la carpeta temporal no radica tanto en ello como en que el sistema devuelve un nombre corto de archivo y puede que nos interese el largo. Mi propuesta ya le dejé
aquí, pero la repito.
Código Delphi
[-]
function GetLongPathName(ShortPath, LongPath: PAnsiCHAR; size: DWORD): DWORD; stdcall; external 'Kernel32.dll' name 'GetLongPathNameA';
function GetTempFolder: String;
var
buffer: array [0..MAX_PATH-1] of AnsiChar;
begin
GetLongPathName(PAnsiCHAR(GetEnvironmentVariable('temp')), buffer, sizeof(buffer));
Result:= buffer;
end;