Zitat:
Result.ApplicationExeName := PChar(Application.ExeName);
[...]
Result.ApplicationPath := PChar(ExtractFileDir(Application.ExeName));
Hier geht es schon mit dem Fehler los. Du weist dem Feld einen PChar auf eine (vom Compiler generierte) lokale Variable zu. Wenn die Funktion dann verlassen wird, ist die lokale Variable natürlich weg und dein PChar zeigt ins Nirwana.