Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Остановить сервис в OnStart / 6 сообщений из 6, страница 1 из 1
05.10.2004, 12:49
    #32723811
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановить сервис в OnStart
В OnStart, т.е. при старте сервиса проверяю существует ли файл настроек.
Логично, если файла нет, то необходимо остановить сервис или препятствовать его дальнейшей загрузки.
Как это сделать?
За любой ответ благодарствую.
...
Рейтинг: 0 / 0
05.10.2004, 13:31
    #32723917
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановить сервис в OnStart
nostraВ OnStart, т.е. при старте сервиса проверяю существует ли файл настроек.
Логично, если файла нет, то необходимо остановить сервис или препятствовать его дальнейшей загрузки.
Как это сделать?
За любой ответ благодарствую. Например поставить продолжительную задержку, тогда SCM сам не сможет запустить Service.
ИМХО :
1 сервисы не должны останавливать сами себя. За них это должен делать SCM либо другой внешний объект, управляющий сервисами (например ServiceController ) Тем не менее можете почитать дискуссию где приводятся различные варианты (не все работающие) остановки сервиса.
2 прописывать логику в OnStart тоже не есть очень хорошо, т.к. ошибки во время старта сервиса трудно отслеживать, а сам сервис трудно отлаживать при разработке
...
Рейтинг: 0 / 0
05.10.2004, 13:42
    #32723947
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановить сервис в OnStart
Спасибо за ответ.
Мне приходило в голову открывать файл настроек без обработчика ошибок в OnStart. В этом случае при отсутствии файла будет вызываться ошибка и SCM не сможет загрузить сервис (проверено).
Т.к. в OnStart я считываю настройки и код проверен в др. приложениях, то можно с большой вероятностью сказать, что сервис не запускается, только потому, что не может найти файл настроек.
...
Рейтинг: 0 / 0
05.10.2004, 13:44
    #32723954
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановить сервис в OnStart
nostraВ OnStart, т.е. при старте сервиса проверяю существует ли файл настроек.
Логично, если файла нет, то необходимо остановить сервис или препятствовать его дальнейшей загрузки.
Как это сделать?
За любой ответ благодарствую.

Самый простой вариант - создать необрабатываемое исключение при старте. (Если наличие файла необходимо для корректного запуска сервиса).

Хотя, писать что-то кроме MyServiceThread.Start() в OnStart - моветон.

Или же завершить выполнение основного потока сервиса после старта. Тогда менеджер должен сообщить пользователю, что "Сервис был запущен, а затем остановлен. Некоторые сервисы прекращают свою работу, если им нечего делать."

Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
protected override void OnStart(string[] args)
{
  //Обработка параметров запуска
  ...
  // Запуск сервиса
  Thread t = new Thread(new ThreadStart(MyServiceProc));
  t.Start();
}

...

private void MyServiceProc()
{
  ...
  // Проверяем наличие файла
  // и при наличии отсутствия ;-))
  // завершаем работу сервиса
  if(!File.Exists(myfilepath))
    return;
}


--
WBR, Roman S. Golubin
...
Рейтинг: 0 / 0
05.10.2004, 13:48
    #32723966
nostra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановить сервис в OnStart
Кстати код:
protected override void OnStart(string[] args)
{
// TODO: Add code here to start your service.
XmlSerializer mySerializer = new XmlSerializer(typeof(ConfigInXml));
TextReader myReader;

try
{
myReader = new StreamReader(@"C:\Tec1.xml");
settingsXml=(ConfigInXml) mySerializer.Deserialize(myReader);
myReader.Close();
}
catch (Exception exc)
{
eventLog1.WriteEntry (exc.Message,System.Diagnostics.EventLogEntryType.Error);
}
timer1.Interval=settingsXml.TimeOut;
timer1.Enabled=true;
eventLog1.WriteEntry("Сервис запущен, настройки считаны);
}
В Event Viewer создается запись: Could not find file "C:\Tec1.xml". и сервис не запускается.
Вот и решение! Мда, не занаешь, где найдешь, где потеряешь.
На С# я совсем не долго, но думаю это решение достаточное.
...
Рейтинг: 0 / 0
05.10.2004, 15:09
    #32724231
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановить сервис в OnStart
Roman S. Golubin
Или же завершить выполнение основного потока сервиса после старта.


Да, что-то я тут прогнал. Совсем мой склероз плохим стал. ;-)

Просто исключение при старте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
protected override void OnStart(string[] args)
{

  if(!File.Exists(myFileName))
    throw new Exception("blah-blah-blah");

  // Запуск сервиса
  t.Start();

}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Остановить сервис в OnStart / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]