Application.Terminate;
(das Application aus der Service-
Unit und nicht das aus Forms)
Vcl.SvcMgr.TServiceApplication.Terminate gibts bei mir nicht (XE4)
EDIT: Ich habe mal folgendes eingefügt:
Delphi-Quellcode:
procedure TMyService.Kill;
const
SERVICE_CONTROL_STOP = $00000001;
begin
ServiceController(SERVICE_CONTROL_STOP);
end;
Wenn jetzt während der Initialisierung eine
Exception auftritt sagt mir der Dienstmanager, dass der Dienst gestartet und dann
angehalten wurde. Der Effekt, dass unter SvHost weiterhin ein "Restprozess" verbleibt, hat sich dadurch leider aber nicht verändert.
Noch ein EDIT: Ich habs rausgefunden! Problem liegt ganz woanders. Ich habe für die Ereignisanzeige eine MessageTable direkt in die Exe von meinem Dienst einkompiliert und verweise in der Registry als MessageFile darauf. Wenn ich nun die Ereignisanzeige öffne, baut diese ein
Handle zum Image (EXE-Datei) auf und lässt es so lange offen bis ich die Ereignisanzeige wieder schließe. Problem erkannt, Gefahr gebannt: Ich kompiliere mir jetzt als MessageFile eine separate
DLL und gut ist.
Am Rande bemerkt finde ich die Methodik, Einträge ins Eventlog zu schreiben, ziemlich abartig kompliziert. Wer auch immer sich das so für NT 3.5 damals ausgedacht hat, er muss ein selbstverliebter Theoretiker gewesen sein