Обьясните ктонибудь как создать сервис (tservice,serviceapplication)

Все особенности программирования под платформу Wintel
Ответить
Аватара пользователя
demon416
Сообщения: 87
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

28 янв 2009, 21:10

надо написать сервис, а ничего не получается, совершенно не понятно как работает эта приблуда
ака хинт: коментируйте код, самим же легче будет разобраться ;)
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

29 янв 2009, 09:26

demon416,
Я поступал проще. Писал обычное приложение (только с невидимым окном). А потом запускал его с помощью специальной программы (коих, как я понимаю немало существует), которая сама из себя представляет сервис, а ее задача как раз запускать как сервисы обычные виндовые applications.
Насчет подобных программ. Например, я слышал про микрософтовский SRVANY.EXE.

А мне на этом форуме посоветовали xyntservice с сайта CodeProjects (там даже есть исходник на C++). Я им пользовался.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

29 янв 2009, 10:44

Ну, давайте не будем скатываться ко всяким суррогатным средствам, когда есть нормальная функциональность ОС. (У нее есть преимущества - см. закладку Recovery в свойствах сервиса)

demon416, в чем конкретно проблема? Создать и скомпилировать приложение довольно просто (см. File/New...)

Сервис в отличте от обычного приложения экспортирует (как DLL) ряд функций, которые позволяют процессу services.exe управлять этим приложением. (Services.exe попросту вызывает эти функции, находя их по имени.) Кстати, отсутствие окна - это не показатель. Сервис может иметь окно. Обычно его делают сворачивающимся в tray. С сервисом также можно взаимодействовать из командной строки (посылать команды), используя команду services с ее параметрами командной строки. (Если сервис умеет на них откливаться конечно)

После кормпиляции сервис регистрируется командой вида
myservice.exe -registerserver
(аналогичным образом разрегистрируется обратно)
И появляется/исчезает из списка Services в Управлении компьютером.
Оттуда же он запускается и останавливается. (Также можно использовать команду net start имя_сервиса или net stop имя_сервиса)

А вот отладка сервисов - это головная боль :( под отладчиком по шагам, вот так запросто, как обычное приложение, его уже не погоняешь. Надо что-то придумывать, например, отлаживать по частям и переностть в конечный проект.
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

29 янв 2009, 15:51

Naeel Maqsudov писал(а):Ну, давайте не будем скатываться ко всяким суррогатным средствам, когда есть нормальная функциональность ОС. (У нее есть преимущества - см. закладку Recovery в свойствах сервиса)
Во-первых, раз сущуествует немало (во всяком случае, более одной) программы, реализующей это (запуск приложений как сервисы), причем, одна из них - родная от Microsoft, значит такой подход работает и почему бы им не пользоваться?

С точки зрения использования (функцилнада), мы получаем точно такой же сервис. Плюсы - не надо тратить усилия на вникание в суть написания другого рода программы (т.е., для самообразования вникнуть, наверное, полезно, но если цель - именно получить работающий сервис, да если еще в условиях лимита времени на разработу, то это несомненный плюс).
Еще плюс:
А вот отладка сервисов - это головная боль :( под отладчиком по шагам, вот так запросто, как обычное приложение, его уже не погоняешь. Надо что-то придумывать, например, отлаживать по частям и переностть в конечный проект.
Поскольку при этом подходе писать надо будет обычное Win32-приложение, то и отлаживать его можно обычными средствами.

Еще о:
Сервис может иметь окно. Обычно его делают сворачивающимся в tray
Часто сервисы предназначены на отдельном компьютере, работающем 24x7, на котором вообще не осуществлен логин пользователся. В этом случае наличие такого окна ы принипе нафиг не нужно, а tray вообще отстутвует (т.к. логин в Windows не сделан :) )
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

29 янв 2009, 19:15

BBB писал(а):Во-первых, раз сущуествует немало ... причем, одна из них - родная от Microsoft, значит такой подход работает и почему бы им не пользоваться?
Это утилиты-костыли, которые предназначены для того, чтобы запустить чужое приложение "как сервис", а если у меня есть выбор: 1) написать приложение и запускать его из под чужой приблуды (пусть даже от MS) 2) написать сервис, нормально интегрированный в ОС.
То лично я выберу второе.
BBB писал(а): Часто сервисы предназначены на отдельном компьютере, работающем 24x7, на котором вообще не осуществлен логин пользователся. В этом случае наличие такого окна в принипе нафиг не нужно, а tray вообще отстутвует (т.к. логин в Windows не сделан :) )


Вот именно по этому я предпочту написать сервис, а не приложение, которое чем-то там запускается.
Что касается окон, то согласен, что это извращение. Но в моей практике встречалось очень серьезное промышленное приложение (у оператора связи), где для режима конфигурирования имелось такое окно (нужно было довольно много интерактива). Естественно, пока никто не логинился, это окно нужно и не было.
Аватара пользователя
demon416
Сообщения: 87
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

30 янв 2009, 17:11

Спасибо всем,разобрался
нашел статью
http://www.devarticles.com/c/a/Delphi-K ... in-Delphi/
ака хинт: коментируйте код, самим же легче будет разобраться ;)
Ответить