Вот что я получил:
protected override void OnStart(string[] args)
{
if (SomeApp.Initialize())
{
SomeApp.StartMonitorAndWork();
base.OnStart(args);
}
}
protected override void OnStop()
{
SomeApp.TearDown();
base.OnStop();
}
Здесь Initialize читает файл конфигурации, и если он не в порядке, то ничего не нужно делать, поэтому служба должна ОСТАНОВИТЬСЯ!Если конфигурация в порядке, 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 - Матти
РЕДАКТИРОВАТЬ: я придумал что-то вроде этого:
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();
}
}