Die Lösung von Mathias würde ich nicht nehmen, denn das chDir kann dir einiges zerschießen, falls du selbst relative Pfade verwendest, außerdem ist es Windows only, und ShellExecute ist sehr hässlich, und man vergisst schnell wie der Aufruf nochmal funktioniert, alles in allem sehr unübersichtlich.
Die Lösung von marcov führt einen TProcess intern aus, ohne das du selbst mit dem TProcess in Berührung kommst. Allerdings ist diese Funktion eigentlich gedacht um einen Rückgabewert aus dem STDOut des zu Startenden Programmes zu lesen (was mit TProcess einen ganz schönen overhead verursacht), und wird daher blockieren bis die Ausführung des zu startenden Programmes beendet wurde. Daher wenn du nicht willst das dein Programm solange hängen bleibt, ist das wohl nicht die richtige Lösung. Außerdem ist das Arbeiten mit TProcess für das simple ausführen, ohne STDOut lesen, nicht viel komplizierter (siehe unten)
Falls du willst das dein Programm das andere Programm nur startet, und dann weiterarbeitet, dann solltest du auf TProcess oder TAsyncProcess (gethreaded, kümmert sich darum das die Aktionen durch events threadsafe sind) verwenden.
Wenn du jetzt einfach ein Programm starten willst, ohne im weiteren Verlauf darauf zuzugreifen (STD In/Out verwenden, status überprüfen, priorität verändern, oder vorzeitig beenden) würde schon so etwas reichen (führt explorer.exe im Verzeichnis C:\ aus):
Code: Alles auswählen
with TProcess.Create(nil) do
try
Executable:='explorer.exe';
CurrentDirectory:='C:\ '; // leer eingefügt da sonst das forum Code-Highlight probleme macht
Execute;
finally
Free;
end;