Danke für die Vorschläge, ich arbeite mich mal durch:
Der Restarter ist ein class helper für TApplication und initialisiert sich selbst über die init-Routine der
Unit.
Vom Programmcode her schöner find ich das nicht, allerdings hast du Recht, ist besser wenn man die
Unit auch mit älteren Delphi Versionen benutzen kann. Ich hab es mal geändert.
Das hätte den Vorteil, das sich der "Aufwand" auf das Einbinden der
Unit beschränkt
Die
GUID muss allerdings immer noch irgendwo gesetzt werden, das wär ja unschön wenn man dafür in die
Unit rein muss. Daher wird das Initialize wohl bleiben müssen.
1. Warum "if ParamStr(1)=" und nicht "FindCmdLineSwitch()"?
Die Funktion kannte ich noch gar nicht, danke, hab sie eingebaut.
2. Wenn bereits eine Instanz läuft, solltest Du die Parameter an diese weitergeben. Z.B. per Named Pipe.
Gute Idee, allerdings kommen mir Named Pipes dafür etwas zu umfangreich vor. Ich hab sie noch nie benutzt, von dem was ich lese scheint es mir aber etwas Overkill zu sein. Warum übergebe ich an ShellExecute nicht einfach
CmdLine + ' restart'
. Einwände?
3. Für Vista und später solltest Du eine Elevate-Möglichkeit einbauen (verb "runas" statt "open").
Verstehe nicht genau, was du meinst.
open reicht doch alle Rechte weiter. Mit
runas springt bei mir z.B. beim Neustart die
UAC an, was ja nicht immer von Nöten ist.
4. Auf Rechnern mit Terminal Services (also auch Fast User Switching) könntest Du Probleme haben. Gib dem Semaphor vllt. besser mal nen "Local\"-Prefix.
Ist erledigt.
Für weitere Ideen bin ich immer dankbar. Werde noch etwas testen und dann bald die aktualisierte
Unit posten.