Oba dają taki sam wynik, ale istnieją subtelne różnice.
Application.ExeName odwołuje się do obiektu aplikacji VCL. Korzystanie z tej właściwości wymaga użycia jednostki Vcl.Forms. Wewnętrznie to wywołuje funkcję ParamStr (0).
Należy zauważyć, że klasa FireMonkey TApplication nie ma tej właściwości (od XE5). Więc nie możesz wywołać Application.ExeName, jeśli używasz FireMonkey. A jeśli kiedykolwiek zmigrowałeś projekt VCL do FireMonkey, będziesz musiał to napisać ponownie.
Funkcja ParamStr OTOH jest jednostką systemową i jest wieloplatformowa (Win, Mac, iOS i Android, zależna wersja OC w używanej wersji Delphi). W systemie Windows ParamStr (0) wywołuje funkcję GetModuleFileName, podczas gdy na innych platformach analizuje wiersz polecenia zwracając pierwszy token, który powinien być pełną ścieżką i nazwą uruchomionego pliku wykonywalnego. (Dzięki Robowi Kennedy'emu za tę korektę)
Tak ... Sugeruję, abyś użył ParamStr (0) bezpośrednio.
'Nazwa aplikacji" Nazwa_wyróżnienia' getter wewnętrznie wywołuje 'ParamStr (0)'. – TLama
A więc opcja 2 jest zawsze preferowana? – Bianca
Tego nie można powiedzieć. Jeśli nie chcesz polegać na obiekcie 'Application' (który musi zawierać jednostkę' Forms' i wymaga, aby twoja aplikacja była aplikacją formularzy VCL), użyj 'ParamStr (0)'. Jeśli korzystasz z aplikacji formularzy VCL i nie masz nic przeciwko dołączeniu jednostki "Forms", możesz użyć lepiej odczytywanego 'Application.ExeName'. Wolę 'ParamStr (0)'. – TLama