![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Успешно создаю сервис следующим методом:
Но есть необходимость автоматического перезапуска сервиса в случае если его завершают из диспетчера задач. Я уже все варианты флагов перепробывал, которые более или менее по логике подходят(описание брал тут http://www.sources.ru/msdn/library/createservice.shtml) Но всё безтолку. Это вообще возможно? Или нужно создавать второй процесс который будет следить за первым? мне не нравится такой вариант решения Это сообщение отредактировал(а) lollollollol - 9.5.2013, 18:10 |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Возможно, при аварийном завершении сервиса. Вот модуль, давно писал правда... Оттуда нужно далеко не всё, а только разобраться с методом TServiceStatus.SetNewServiceStatus, а именно - со второй половиной этого метода. Присоединённый файл ( Кол-во скачиваний: 10 )
uServiceController.pas 62,43 Kb |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
||||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
У меня приложение разработано c одним uses windows.
Проект уже готов, но по задумке он должен себя перезапускать при сбое, или завершении процесса. Подскажи пожалуйста, как нужно изменить код чтобы сервис перезапускался? На сколько я понимаю, нужно указать флаг. Какой-я не понял. Попытка изучить предоставленый тобой код не удалась. Заранее очень благодарен за помощь! Это сообщение отредактировал(а) lollollollol - 12.5.2013, 19:02 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
Разве такое возможно? Это всё равно что сказать, что программа сама себя должна запустить с диска, не будучи запущеной. Добавлено через 1 минуту и 28 секунд Ты хоть раз заглядывал в службы windows? настройки служб смотрел? |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Но ведь перезапуск сервиса возможен при при аварийном завершении, или я не прав?
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Да возможно это, возможно Вкладка "восстановление" в свойствах служб. Параметры меняются через ChangeServiceConfig2 с флагом SERVICE_CONFIG_FAILURE_ACTIONS. При создании службы такое невозможно. lollollollol, ты код посмотрел? Что мешает выдернуть только нужное, и остаться с одним Windows в uses? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
Да, возможно, но этим занимается непосредственно винда
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
только сейчас заметил.
Что значит - не удалась? {$IFDEF offtop} - какую ошибку выдал мозг при попытке изучения кода? желательно со скрином и конкретной строчкой, которая привела к ошибке. - какая версия использовалась, на какой конфигурации проводилось изучение? {$ENDIF} В общем - конкретнее, что вызвало затруднение. Это сообщение отредактировал(а) kami - 10.5.2013, 17:41 |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Написал функцию ServicesReBoot
Вот так вызываю
Код отработал, но процесс не перезапускается при сбое Это сообщение отредактировал(а) lollollollol - 12.5.2013, 19:03 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Пойдем по порядку: 1. Почему здесь первым параметром стоит 0 ? И - надо бы анализировать, получилось ли получить FServiceHandle. 2. каждому OpenService должен соответствовать CloseServiceHandle, я бы вообще обернул это всё в try-finally. 3. А здесь почему 0? 4. Память выделена, замечательно. А кто будет заполнять массив lpsaActions правильными параметрами? Добавлено через 9 минут и 16 секунд И в дополнение. Я бы посоветовал вместо GetMem использовать AllocMem |
|||
|
||||
| lollollollol |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
1.
FServiceHandle успешно получен (исправил, спасибо!) 2. Сделал
3. В Вашем примере: SrvFailureActions.cActions := NewStatus.ServiceFailureActions.cActions; Где заполняется NewStatus.ServiceFailureActions.cActions не вижу, а по дефолту равно 0. 4. Так же не нашел какие параметры длжны быть переданы lpCommand:=''; - Что нужно прописать тут? Почему при выполнеии функции r:=ChangeServiceConfig2(FServiceHandle, SERVICE_CONFIG_FAILURE_ACTIONS, @SrvFailureActions); програма вылетает с Runtime error 216 at 77612428? Это сообщение отредактировал(а) lollollollol - 12.5.2013, 19:01 |
||||
|
|||||
| kami |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Можно же посмотреть, что означает этот параметр И лучше всего - смотреть первоисточник (тыдыщ) А там написано:
Итого - что получается при выполнении "адаптированного" кода? Едем дальше. Ну зачем нужно было заменять определения структур? Ведь в первом приведенном коде было объявлено правильно:
А сейчас -
????? Неудивительно, что возникает ашипка. И далее - SrvFailureActions.lpsaActions.SCAction:=1; Какие значения может принимать SCAction советую посмотреть здесь, а то получается, что при сбое службы вы перезапускаете комп. Это сообщение отредактировал(а) kami - 11.5.2013, 11:17 |
||||||||
|
|||||||||
| Dik0n |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.5.2011 Репутация: 1 Всего: 10 |
В свое время искал тоже, в итоге плюнул, пишу напрямую в реестр нужные параметры, на все виды збоев - перезапуск.
Бинарные данные:
Взял из Delphi проекта, приспособить думаю не проблема --------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |