Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618

Самозапуск Windows службы

10.09.2013, 16:27. Показов 5008. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.
У меня есть программа , "закулисная" часть которой обрабатывается в фоновом режиме в Windows службе.
У службы поставлена галочка на автозапуск при старте операционной системы. Но есть одно но, если в службе (при вычислениях) происходит необработанный exception , то ясное дело служба закрываться.
При перезагрузке служба уже не запускается, пока не стартануть ее вручную.

Собственно вопрос , как сделать так , что бы при остановке службы она сама запускалась снова? Знакомый разработчик говорил, что ставят дублирующую службу , которая следит за первой, мол если первая "упала", то вторая сказу же ее стартует.

У кого какие мысли?
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2013, 16:27
Ответы с готовыми решениями:

Windows службы
Здравствуйте. Вопрос касается работы программы в фоновом режиме. Вернее будет сервер, который по сокету будет обмениваться с клиентами...

Службы Windows
Здравствуйте. Я написал программу которая выводит список служб Windows в листбокс, показывается статус выбранной службы в лейбле и по...

Как остановить две службы Windows в Windows 7
Нужно принудительно без запросов остановить эти две службы: Система событий COM+ (EventSystem) Служба кэша шрифтов Windows...

11
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
10.09.2013, 16:32
поймать ошибку не проще? try catch и всё такое..
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
10.09.2013, 23:18  [ТС]
Цитата Сообщение от m0nax Посмотреть сообщение
поймать ошибку не проще? try catch и всё такое..
Не проще) Продукт у пользователя, служба падает....прога естественно работает не корректно(служба локальная). И что ему делать?
Вручную запускать? А если прав нет. Хотя это малая беда, юзеры кроме как запустить с ярлыка ничего не могут.
А все ошибки отлавливать одним трай кечем , оно и так стоит, но это все не решение(5к строк....дебажить сложновато).
А служба насколько я знаю может упасть не только из-за внутренней ошибки логики.
Кстати , способ как перезапускать службу нашел, завтра скину код.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.09.2013, 00:12
ITL, служба должна дергать 1.. 5 методов модели. Обернуть их в try catch не составит труда.
0
39 / 37 / 8
Регистрация: 01.08.2013
Сообщений: 106
11.09.2013, 08:22
Job повесить, который будет поднимать службу каждые n минут. (Радикальный способ, если не требующий переделки службы)
0
6 / 6 / 0
Регистрация: 10.06.2013
Сообщений: 32
11.09.2013, 09:13
В настройке служб есть вкладка "восстановление", где можно задать действия, предпринимаемые при сбоях. В том числе перезапуск службы и перезагрузка машины.
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
11.09.2013, 10:24  [ТС]
Вообщем как и обещал.

Я вызываю этот метод после установки службы. Редактируются в настройке служб вкладка "восстановление" . Перезапуск после падения через 5 сек.
ServiceName - имя вашей службы.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int exitCode;
            using (var process = new Process())
            {
                var startInfo = process.StartInfo;
                startInfo.FileName = "sc";
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
 
                startInfo.Arguments = string.Format("failure \"{0}\" reset= 0 actions= restart/5000", ServiceName);
 
                process.Start();
                process.WaitForExit();
 
                exitCode = process.ExitCode;
 
                process.Close();
            }
 
            if (exitCode != 0)
                throw new InvalidOperationException();
Цитата Сообщение от -X- Посмотреть сообщение
В настройке служб есть вкладка "восстановление", где можно задать действия, предпринимаемые при сбоях. В том числе перезапуск службы и перезагрузка машины.
я в курсе. Просто искал способ это делать через код , а не ручками менять.
1
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
11.09.2013, 11:03
Через код, как уже было сказано, нужно делать обработку исключений. Служба не должна падать из-за того, что где-то в ней случилось исключение. Правильный сценарий - записать исключение в лог и, восстановив контекст, работать дальше.

Хотя знаю парочку программных продуктов, в которых есть специальные службы, которая в случае чего поднимает сломавшиеся другие службы. Но это обусловлено в большей степени повышенными требованиями к доступности службы, нежели нелюбовью к трукачам.
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
11.09.2013, 11:15  [ТС]
Возникла не большая проблема, когда устанавливается служба, то она не может на локальных правах вписать сама себе настройки перезапуска.
Но я использую wix установщик, так и там же при установке самой службы вписал её настройки.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<ServiceInstall
              Id="ServiceInstaller"
              Type="ownProcess"
              Vital="yes"
              Name=""
              DisplayName=""
              Description=""
              Start="auto"
              Account="LocalSystem"
              ErrorControl="ignore"
              Interactive="no">
          <util:ServiceConfig
            FirstFailureActionType="restart"
            SecondFailureActionType="restart"
            ThirdFailureActionType="restart"
            RestartServiceDelayInSeconds="5"/>
        </ServiceInstall>
        <ServiceControl Id="StartService" Start="install" Stop="uninstall" Remove="uninstall" Name="" Wait="yes" />
Добавлено через 8 минут
Цитата Сообщение от ksk Посмотреть сообщение
Через код, как уже было сказано, нужно делать обработку исключений. Служба не должна падать из-за того, что где-то в ней случилось исключение. Правильный сценарий - записать исключение в лог и, восстановив контекст, работать дальше.

Хотя знаю парочку программных продуктов, в которых есть специальные службы, которая в случае чего поднимает сломавшиеся другие службы. Но это обусловлено в большей степени повышенными требованиями к доступности службы, нежели нелюбовью к трукачам.
Вы правы...но. Я написал программу, ЧТО-ТО не учел, и произошел сбой в логике(служба сама по себе, только записывает данные в базу , но логики много очень) и служба не дай бог упала....что теперь делать? Юзер не доволен и.т.д. Я лучше перестрахуюсь, отчет то мне придет об ошибке, но пользователь сможет дальше работать.
Я же об этом забочусь.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.09.2013, 12:46
Служба не должна падать, даже если произошла ошибка , все просто
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
11.09.2013, 13:40
Цитата Сообщение от ITL Посмотреть сообщение
ЧТО-ТО не учел, и произошел сбой в логике(служба сама по себе, только записывает данные в базу , но логики много очень) и служба не дай бог упала....что теперь делать? Юзер не доволен и.т.д. Я лучше перестрахуюсь, отчет то мне придет об ошибке, но пользователь сможет дальше работать.
Я же об этом забочусь.
Почти невозможно учесть всё. Но зато возможно написать трукач на самом верхнем уровне программы. Чтобы исключение не оставалось непохандленным.

Например, у меня есть служба, которая пишет важное в базу. много. Периодически пропадает коннект к базе. Что я делаю? я сделал очередь записи в базу на стандартном связном списке. завернул запись в трукач. Не получилось - оставляю в очереди.
Кратковременные перебои связи с БД это выдерживает.
Долгосрочных пока не было. но на этот случай я сейчас делаю сериализацию очереди в файл, чтобы оперативку не жрать.
И главный цикл рабочего потока тоже в трукаче. Если что-то взорвётся - внешний трукач это словит , запишет, и перейдёт к следующей итерации цикла.
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
11.09.2013, 18:08  [ТС]
У меня так же сделано.
Вообщем ладно, спор не о чем. Проблему я решил.
Всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2013, 18:08
Помогаю со студенческими работами здесь

Службы windows
Доброго времени суток! Подскажите пожалуйста скрипт запуска и остановки любой запущенной службы windows , нужно вывести на сайт две кнопки...

Windows 8. Службы
Недавно я использовал программу AVG PCtuneup и он мне наверное отключил какую-то службу. Но какую точно я не знаю. Из-за этого теперь у...

Службы Windows XP
Не могу програмно установить службу, подскажите как это зделать?

Службы Windows 10
Рег файлы для приведения служб к значению по умолчанию ( в продолжении тем про настройку служб) • Home (Домашняя) — для домашнего...

Службы Windows 10
Народ дайте краткое описания каждой службы на Windows 10. Я Искал информачию об этих службах нечего не нашол. Мне уже это надоело:wall:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru