Da habe ich doch mal was geschrieben. Guckst du hier:
Delphi-Quellcode:
if IsLocalSystem then
begin
// SECOND INSTANCE
// Under SYSTEM try to run as a service. This will fail if the app was not
// installed as a service, yet
ste[0].lpServiceName := pszServiceName;
ste[0].lpServiceProc := @ServiceMainA;
ste[1].lpServiceName := nil;
ste[1].lpServiceProc := nil;
// hand over control to SCM
StartServiceCtrlDispatcher(ste[0]);
end
else
begin
// ...
end;
Download unter (was du brauchst ist der Source von CMDasSYS):
http://assarbad.net/stuff/localsystem.zip /
http://assarbad.net/stuff/localsystem.rar
Der Spaß basiert auf der Annahme, daß der Service im Kontext von SYSTEM (LocalSystem) gestartet wird, das Programm selber aber nicht (wenn es also nicht als Service gestartet wurde). Auf dieser Entscheidung basierend wird dann die Kontrolle an den SCM übergeben oder eben die normale Hauptfunktion aufgerufen - zumindest wäre dies bei dir dann wohl so.
Alternativ könntest du dem Service einen Parameter auf den Weg geben, damit das Programm weiß, daß es als Service laufen soll.