Entrambi danno lo stesso risultato, ma ci sono sottili differenze.
Application.ExeName fa riferimento all'oggetto dell'applicazione VCL. L'utilizzo di questa proprietà richiede l'utilizzo dell'unità Vcl.Forms. Internamente ciò chiama la funzione ParamStr (0).
Si noti che la classe TApplication FireMonkey non ha questa proprietà (come XE5). Quindi non puoi chiamare Application.ExeName se stai usando FireMonkey. E se dovessi mai migrare un progetto VCL in FireMonkey, dovrai riscriverlo.
La funzione ParamStr OTOH è l'unità di sistema ed è multipiattaforma (Win, Mac, iOS e Android, in base all'OC nella versione Delphi in uso). In Windows ParamStr (0) chiama la funzione GetModuleFileName, mentre sulle altre piattaforme analizza la riga di comando che restituisce il primo token, che dovrebbe essere il percorso completo e il nome dell'eseguibile in esecuzione. (Grazie a Rob Kennedy per questa correzione)
Quindi ... Suggerisco di utilizzare direttamente ParamStr (0).
'getter Application.ExeName' chiama internamente' ParamStr (0) '. – TLama
Quindi, l'opzione 2 è sempre preferita? – Bianca
Questo è quello che nessuno può dire. Se non vuoi fare affidamento sull'oggetto 'Applicazione' (che deve includere l'unità' Forms' e richiede che l'applicazione sia l'applicazione di moduli VCL), usa 'ParamStr (0)'. Se si dispone di un'applicazione per moduli VCL e non si è disposti a includere l'unità 'Forms', è possibile utilizzare un' Application.ExeName' più leggibile. Preferisco 'ParamStr (0)'. – TLama