Die richtige Konstante ist hier 'Max_Path' und nicht 'MaxChar'.
Der Buffer 'path' wird nicht gelöscht und das Ergebnis von 'SHGetFolderPath' nicht ausgewertet.
In dieser Kombination kann StrPas einen riesigen String voller Speichermüll zurückgeben oder sogar eine Zugriffsverletzung auslösen.
Man könnte das z.B. so lösen:
Delphi-Quellcode:
function AppDataPath: AnsiString;
const
SHGFP_TYPE_CURRENT = 0;
begin
SetLength(Result, Max_Path);
FillChar(Result[1], Max_Path, 0);
SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, PAnsiChar(Result));
SetLength(Result, StrLen(PAnsiChar(Result)));
Result := Result + '\VPUpdater\';
end;