Ahlso du musst bei shellexecute meherere Parameter angeben. Shellexecute ist ein Befehl der dierekt von der WindowsAPI ist, also ist er ziemlich kompliziert und umständlich und hat Funktionen die du garnicht brauchst.
Der erste Parameter erlaubt dir das Fensterhandle des Programmes anzugeben, von dem es gestartet wurde (oder so glaube ich *g*). Der ist für dich unwichtig, gib einfach Null an.
Im zweiten Parameter kannst du den Typ der Operation die du machen willst als String angeben, du willst ein Programm öffnen, allso nimmst du 'open'.
Als drittes musst du den Dateinamen der Datei angeben, und zwar als pansichar. Das ist sowas ähnliches wie ein String, und Delphi kann es umwandeln: pansichar(application.exename).
In Parameters kannst du alle Parameter angeben, mit der du dein Programm startest. Die sind noch hauptsächlich aus DOS-Zeiten geblieben, werden aber manchmal heute immer noch benutzt (von mir z.B.). Das kannst du auch leer lassen, also einfach '' reinschreiben.
In Directory kannst du das Verzeichniss in dem das Programm ausgeführt wird angeben, fallst du es nicht ändern willst, lässt du hier auch frei: ''
In ShowCmd kannst du festlegen ob das Programm Maximiert oder Minimiert gestartet wird. Um in Standardeinstellungen zu starten schreib einfach 0.
Also:
Delphi-Quellcode:
shellexecute(0,'open',pansichar(application.exename),'','',0); //Programm neustarten
application.terminate; //Programm schließen.
//Du kannst auch zum besonders brutalen Beenden den Befehl halt(0) verwenden.
//Oder close, dann wird die onclose-Prozedur der Form noch ausgeführt.
Ich halte deine Arbeitsweise aber trotzdem für unsauber. Es wäre schonender für den Rechner wenn du alle Einstellungen so zurücksetzt (ok, für dich vllt nicht so schonend...)