Вот что я получил:
protected override void OnStart(string[] args)
{
if (SomeApp.Initialize())
{
SomeApp.StartMonitorAndWork();
base.OnStart(args);
}
}
protected override void OnStop()
{
SomeApp.TearDown();
base.OnStop();
}
Здесь Initialize читает файл конфигурации, и если он ошибается, то ничего не нужно делать, чтобы служба STOP! Если конфигурация в порядке, запускается StartMonitorAndWork:
Timer(new TimerCallback(DoWork), null, startTime, loopTime);
и DoWork периодически регистрирует базу данных.
Если "Инициализировать" не удается (я проверяю файл журнала), и я пытаюсь остановить службу из "Администрирование" → "Службы", я получаю:
Could not stop the SomeService on Local Computer. The service did not return an error. This could be internal Windows error or an internal service error. If the problem persists, contact system administrator.
The question is: "Is exiting OnStart without doing nothing enough if Initialize returns false?
ИЛИ должно быть что-то вроде этого:
private void ExitService()
{
this.OnStop();
System.Environment.Exit(1);
}
protected override void OnStart(string[] args)
{
if (ObjectFolderApp.Initialize())
{
SomeApp.StartMonitorAndWork();
base.OnStart(args);
}
else
{
ExitService();
}
}
Спасибо и BR - Matti
EDIT: Я придумал что-то вроде этого:
protected override void OnStart(string[] args)
{
try
{
if (SomeApp.Initialize())
{
SomeApp.StartMonitorAndWork();
base.OnStart(args);
}
else
{
Stop();
}
}
catch
{
Stop();
}
}
protected override void OnStop()
{
try
{
SomeApp.TearDown();
base.OnStop();
}
catch
{
base.OnStop();
}
}