Hallo,
ich habe eine
VCL-Service-Applikation, die beim Starten auf Vorhandensein einer INI-Datei prüft:
Code:
PROCEDURE TsrvWatcher.ServiceStart(Sender: TService; VAR Started: Boolean);
VAR
IniFile : TIniFile;
BEGIN
IniFile := TIniFile.Create(ChangeFileExt(ApplicationLocation, '.ini'));
TRY
WITH IniFile DO
BEGIN
IF NOT FileExists(FileName) THEN
BEGIN
LogMessage(#13#10 + #13#10 + srvWatcher.DisplayName + ' ERROR: ' +
IniFile.FileName + ' not found, shutdown myself!)', EVENTLOG_ERROR_TYPE);
Self.DoStop;
// [b][color=red]Self.StartType := stDisabled; //<-- DAS FUNKTIONIERT NICHT[/color][/b]
EXIT;
END;
END;
FINALLY
// IniFile
FreeAndNil(IniFile);
END;
Timer_MainLoop.Enabled := True;
END;
Ich möchte, dass wenn ein Fehler auftritt, der StartType auf stDisabled gesetzt wird,
damit nicht nach jedem Neustart des Rechners versucht wird das Service zu starten.
Mit obigem Code geht das leider nicht (Keine Änderung des StartTyps im Dienste-Manager).
Interessant ist außerdem, dass keine
Exception ausgelöst wird, wenn die Ini-Datei
mit fehlerhaftem Pfad erzeugt wird, daher meine Lösung mit FileExists().