Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка искл. ситуаций в WinNT Service [D7, WinXP]


Страницы:   1 2

Прогер ©   (2006-12-22 08:30:00) 

Глобальная переменная TApplication для EXE предусматривает обработчик (событие) OnException, с помощью которого я протоколирую все возникающие исключительные ситуации. Но это в приложении (EXE). А как быть с сервисом?


Прогер   (2006-12-22 14:11:00) [1]

Большое прогерское СПАСИБО за обсуждение темы!


Прогер   (2006-12-22 14:08:00) [2]


> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Имя
> службы>\ImagePath


Указан полный путь поиска EXE-файла с сервисом. Если всю строку взять в двойные кавычки - ЗАПУСКАЕТСЯ!!!


BiN   (2006-12-22 14:06:00) [3]


> Сергей М. ©   (22.12.06 13:56) [33]
>
> Другой вопрос, почему система выдает такую идиотскую ошибку
> ?
>
> Впрочем, это не новость. Схожая ситуация наблюдается при
> попытке загрузки заведомо существующего dll-модуля по заведомо
> корректному пути: если ф-ция DllMain() вернула не 0, система
> кричит, мол, указанный файл по указанному пути не найден,
>  что есть очевидная ерунда.

Странно. У меня вот выдала "System Error.  Code: 1114.
A dynamic link library (DLL) initialization routine failed".


Сергей М.   (2006-12-22 13:56:00) [4]


> BiN ©   (22.12.06 13:47) [31]


Ну это легко проверить, разместив ехе-файл сервис-приложения по идентичному пути на той машине, где сервис успешно до этого стартовал.

Другой вопрос, почему система выдает такую идиотскую ошибку ?

Впрочем, это не новость. Схожая ситуация наблюдается при попытке загрузки заведомо существующего dll-модуля по заведомо корректному пути: если ф-ция DllMain() вернула не 0, система кричит, мол, указанный файл по указанному пути не найден, что есть очевидная ерунда.


BiN   (2006-12-22 13:48:00) [5]


> Прогер   (22.12.06 13:46) [30]
>
>
> Ещё бы понимать, что должно быть прописано в реестре :)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Имя службы>\ImagePath


BiN   (2006-12-22 13:47:00) [6]


> Сергей М. ©   (22.12.06 13:44) [29]
>
> Жуть какая) ...
>
> Все-таки загляни в реестр, проверь правильность регистр.
> записей для этого сервиса

Думаю, именно в этом и дело. Т.к. борланд почему-то не следует рекомендации msdn:

lpBinaryPathName
[in] ... If the path contains a space, it must be quoted so that it is correctly interpreted.


Прогер   (2006-12-22 13:46:00) [7]


> Все-таки загляни в реестр, проверь правильность регистр.
> записей для этого сервиса


Ещё бы понимать, что должно быть прописано в реестре :)

В общем, на днях переустанавлю ОС. Вот хохма будет, если ошибка сохраниться! :)


Сергей М.   (2006-12-22 13:44:00) [8]

Жуть какая) ...

Все-таки загляни в реестр, проверь правильность регистр.записей для этого сервиса


Прогер   (2006-12-22 13:37:00) [9]


> Возможно код отказа, возвращенный по GetLasError при возврате
> ф-цией False, прояснит ситуацию


Код 193

{ %1 is not a valid Windows NT application. }
 ERROR_BAD_EXE_FORMAT = 193;


Сергей М.   (2006-12-22 12:30:00) [10]


> Прогер   (22.12.06 12:27) [25]


Попробуй программно стартовать свой сервис.

см. StartService() и пр. ф-ции для обеспечения работы оной.

Возможно код отказа, возвращенный по GetLasError при возврате ф-цией False, прояснит ситуацию.


Сергей М.   (2006-12-22 12:27:00) [11]


> Прогер   (22.12.06 12:25) [24]


Ну это уже не существенно, раз на другой машине все работает.


Прогер   (2006-12-22 12:27:00) [12]


> А ты, понимаешь ли, развел бодягу про исключения)


Окей, всё прекрасно. На чужом компьютере. А что же на моём? Куда копать-то... прям не знаю. Винду переустанавливать не охота...


Прогер   (2006-12-22 12:25:00) [13]


> Т.е. ты утверждаешь, что ты сгенерировал ехе-файл сервис-
> приложения средствами соответствующего IDE-эксперта, при
> этом не внеся в текст проекта никаких изменений, инсталляция
> прошла якобы успешно (о чем имеются соотв.записи в реестре)
> и в результате имеешь вот такую картину при попытке старта
> сервиса ?


В Delphi7 Создать - ServiceAppl. Изменения: страрт вручную, отображаемое в консоли имя сервиса, OnStart (Started:= True;), OnStop (Stopped = True;). Ну мелочь в общем. Функционала никакого - просто запуск и останов.

Реестр не смотрел, после запуска с -install появляется сообщение "Service installed succ".


Сергей М.   (2006-12-22 12:24:00) [14]

Ну вот)
Все, оказывается, расчудесно работает.
А ты, понимаешь ли, развел бодягу про исключения)


Прогер   (2006-12-22 12:21:00) [15]

Установил сервис на другой компьютер (тоже WinXP SP2 rus) - работает!


Сергей М.   (2006-12-22 12:18:00) [16]


> Не успеваю к процессу подключиться


см. стандартную справку "Debugging service applications"


> Само сообщение "...не является приложением Win32" наводит
> на плохую мысль об ошибке, допущенной компилятором


С трудом в это верится.

Т.е. ты утверждаешь, что ты сгенерировал ехе-файл сервис-приложения средствами соответствующего IDE-эксперта, при этом не внеся в текст проекта никакихизменений, инсталляция прошла якобы успешно (о чем имеются соотв.записи в реестре) и в результате имеешь вот такую картину при попытке старта сервиса ?


Прогер   (2006-12-22 12:08:00) [17]

После попытки запуска сервиса появляется сообщение:

---------------------------
Службы
---------------------------
Не удалось запустить службу A123Service1 на Локальный компьютер.

Ошибка 193: 0xc1
---------------------------
ОК  
---------------------------

А в системном журнале: "... не явл-ся прил. Win32".


Прогер   (2006-12-22 12:05:00) [18]

С точками останова в сервисе проблема. Не успеваю к процессу подключиться. Поэтому отладку произвожу либо догадками, либо на основе протокола (локальные try...except).

Само сообщение "...не является приложением Win32" наводит на плохую мысль об ошибке, допущенной компилятором. Хотя с ключами -install, -uninstall отрабатывает с соответствующими сообщениями. Сервисы самой ОС, от антивируса и другие (не мои) работат без проблем.


Сергей М.   (2006-12-22 11:56:00) [19]

Более того, если бы ошибка была именно в твоем коде, в лог была бы записана строчка вида "Service failed on ...", а не та что ты наблюдаешь.


Сергей М.   (2006-12-22 11:51:00) [20]


> Боюсь, что мой


Не надо гадать.

Если сервис-приложение стартует, то ты поймаешь брейкпойнт на первой же его строчке.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо