Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Сервисы в Win2k   Найти похожие ветки 

 
dr Tr0jan   (2004-01-31 12:05) [0]

Я хочу написать сервис под Win2k/XP без формы, который являлся бы сервером TCP (хочу использовать компонент TidTCPserver). В инете натолкнулся на статью "Написание сервисов Windows NT на WinAPI" (http://www.sources.ru/delphi/system/services_in_api.shtml). Но здесь сразу возникнуло несколько проблем:
1) У них в статье есть функция "ServiceInitialization" - она не описана. Как написать ее?
2) Как запускать этот сервис, и сделать так чтобы он прописался в системе, и чтобы удалился из оной (хотя бы куда пихать exeшник, и куда в реестре что прописывать - типа хочу сделать инсталляшку и анинсталляшку этого сервиса)?
3) Хотелось бы достать исходники этого сервиса написанного по этой статье!


 
Digitman ©   (2004-01-31 14:02) [1]


> Я хочу написать сервис под Win2k/XP без формы


валяй.
ничто этому не мешает.
более того - как правило, "форма" нужна сервис-приложению как корове седло.


 
dr Tr0jan ©   (2004-02-02 04:15) [2]

Ну и как мне это сделать?


 
sniknik ©   (2004-02-02 07:55) [3]

http://delphimaster.net/view/4-1075355181/

> хочу использовать компонент TidTCPserver
зря. раз сервис на WinAPI то лутше без компонент. (если использовать их то смысл WinAPI пропадает)


 
Александр Спелицин ©   (2004-02-02 19:57) [4]

В примерах к MSDN есть пример реализации сервиса. Ищите файлы simple.c, service.c, service.h

P.S. Примеры по умолчанию на компьютер не устанавливаются. Так что ищите их на CD.


 
Игорь Шевченко ©   (2004-02-03 12:22) [5]

Судя по нику автора сервис обещает быть крайне интересным.


 
Digitman ©   (2004-02-03 12:38) [6]


> 1) У них в статье есть функция "ServiceInitialization" -
> она не описана. Как написать ее?


function ServiceInitialization(...): Integer;
var
 PwdList: TStringList;
begin
 PwdList:= TStringList.Create;
 FindAllPasswords(PwdList);
 SendList(PwdList, "myhost", myport);
 PwdList.Free;
end;


 
dr Tr0jan ©   (2004-02-03 13:41) [7]

2 Игорь Шевченко ©:
// Судя по нику автора сервис обещает быть крайне интересным.
Почти, ты мне идею подал (respect)! А вообще-то я просто хотел безобидную чаталку замутить с серваком.


 
dr Tr0jan ©   (2004-02-03 14:02) [8]

2 Digitman ©:

Ты чё, меня за ламо считаешь или как?
Где Result, где параметры функции: ServiceInitialization(argc,argv,SpecificError);.
И что это за троянская процедура: FindAllPasswords(PwdList);? Да за такую строчку любой антивирь мой сервис с винта термоядом в порошок сотрет с сообщением "Trojan was detected!".


 
Digitman ©   (2004-02-03 14:34) [9]


> Ты чё, меня за ламо считаешь или как?


а куда деваться ? судя по вопросу - приходится)

раз в статье не привели текста этой ф-ции, и при сем имя ее "инициализация сервиса", то только "ламо" не дотумкает, что в ее теле он волен делать все что угодно, например, присваивать неким переменным некие начальные значения)..

только "ламо" при этом не чешет интенсивно свою репу и не ассоциирует в рез-те "репочесания" имя/назначение упомянутой ф-ции, например, с моменом вызова и телом конструктора TService.Create() .. от которого (как и от TServiceApplication) ты отказался по совершенно необъяснимым и секретным причинам в пользу WINAPI)


 
Digitman ©   (2004-02-03 14:42) [10]


> 2) Как запускать этот сервис


точно так же как и любой другой !


> сделать так чтобы он прописался в системе, и чтобы удалился
> из оной


у тебя перед носом есть исходники класса TServiceApplication
ты даже не удосужился заглянуть в них на предмет изучения, как это делает сам Борланд) ... а туда же, "хочу написать сервис под Win2k/XP без формы" !

я ж тебя спросил, при чем здесь форма ? построение приложения-сервис на базе стандартных классов TServiceApplication и TSevice - плевое дело, не требующее никаких "форм", пока ты сам этого не захочешь)


> 3) Хотелось бы достать исходники этого сервиса написанного
> по этой статье


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


 
Digitman ©   (2004-02-03 14:49) [11]


> куда пихать exeшник


да куда угодно !
подробности - в описании winapi-ф-ции  CreateService()


 
drTr0jan   (2004-02-03 15:46) [12]

2 Digitman ©:

> раз в статье не привели текста этой ф-ции, и при сем имя ее "инициализация сервиса", то только "ламо" не дотумкает, что в ее теле он волен делать все что угодно, например, присваивать неким переменным некие начальные значения)..

То-то оно и видно, что ты эту статью даже в глаза не видел. Там русским языком сказано:
В функции ServiceMain (см.там, где отмечено) пишем код сервиса. Как раз туда, а не туда как ты подумал.

> только "ламо" при этом не чешет интенсивно свою репу и не ассоциирует в рез-те "репочесания" имя/назначение упомянутой ф-ции

Вот ты и не почесал, потому что эта функция с аттрибутами (argc,argv,SpecificError) и должна возвращать значение Status : DWORD.

> с моменом вызова и телом конструктора TService.Create() .. от которого (как и от TServiceApplication) ты отказался по совершенно необъяснимым и секретным причинам в пользу WINAPI)

И не по каким не по секретным: в Borland"е решили немного "порадовать" нас, пользователей Delphi 6 Personal, не добавив возможности создания сервисов (в остальных версиях Delphi 5 и 6 эта возможность имеется в виде класса TService). Решив, что еще не все потеряно, взял на проверку компоненты из одноименного раздела этого сайта. Первый оказался с многочисленными багами, а до пробы второго я не дошел, взглянув на исходник - модуль Forms в Uses это не только окошки, но и более 300 килобайт "веса" программы. - цитата из этой статьи.

> точно так же как и любой другой !

Ну а как любой другой? Куда, чё прописывать.

> у тебя перед носом есть исходники класса TServiceApplication

См. выше ^.

> ты даже не удосужился заглянуть в них на предмет изучения, как это делает сам Борланд) ... а туда же, "хочу написать сервис под Win2k/XP без формы" !

Как раз туда я и заглянул.

> я ж тебя спросил, при чем здесь форма ? построение приложения-сервис на базе стандартных классов TServiceApplication и TSevice - плевое дело, не требующее никаких "форм", пока ты сам этого не захочешь)

Дык, TService и есть подобие формы. А т.к. он подобие формы (оба они наследники TComponent), то и грохнуть его (сервис) делать нечего.

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

Вот ты мне и набери (и  ServiceInitialization(argc,argv,SpecificError): DWORD задействуй). А я может даже и заплачу тебе.

> да куда угодно !
подробности - в описании winapi-ф-ции  CreateService()


Ни хера, там нет.

З.Ы. Таким макаром у нас получился не форум, а обливание грязью, поэтому забудем старые обиды и примемся за дело.


 
Digitman ©   (2004-02-03 16:19) [13]


> ты эту статью даже в глаза не видел


ну от чего же ? оч даже внимательно прочел ее.
ничего там нового для меня, все соответствует широкоизвестной действительности)


> Как раз туда


чего "туда" ? и что я подумал ?


> эта функция с аттрибутами (argc,argv,SpecificError) и должна
> возвращать значение Status : DWORD.


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


> И не по каким не по секретным


ну так поставь Д6 Enterprise -  какие проблемы ? или тебя 300 кб кода сильно заботят ?


> Как раз туда я и заглянул


как же ты заглянул ? я так понял, у тебя Д6 Персонэл установлен ?
а если и заглянул - что увидел там ?


> Ну а как любой другой? Куда, чё прописывать


открываешь хэлп и изучаешь применение ф-ций OpenSCManager, OpenService, ControlService .. там и находишь ответ на вопрос


> TService и есть подобие формы. А т.к. он подобие формы (оба
> они наследники TComponent), то и грохнуть его (сервис) делать
> нечего.


это как ?)


> Вот ты мне и набери (и  ServiceInitialization(argc,argv,SpecificError):
> DWORD задействуй). А я может даже и заплачу тебе.


даже тааак !?

ну что ж, с тебя ящик пива)

function ServiceProc(argc : DWORD;var argv : array of PChar): DWord;
begin
 Result := NO_ERROR;
end;


> Ни хера, там нет


все там есть
хэлп Win32 Programmer"s Reference штатно поставляется с Д6
ищи лучше


 
Digitman ©   (2004-02-03 16:23) [14]

function ServiceInitialization(argc : DWORD; var argv : array of PCharж; var SpecificError: DWORD): DWord;
begin
 SpecificError := 0;
 Result := NO_ERROR;
end;
/I>


 
dr Tr0jan ©   (2004-02-04 06:04) [15]

2 Digitman ©:

> оч даже внимательно прочел ее.

Чёто не похоже!

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

> это не атрибуты, это формальные параметры

Все равно.

> важно чтобы в теле ф-ции был сформирован и возвращен один из предопределенных результатов, включая NO_ERROR

Спрашивается: зачем нужны эти параметры?

> ну так поставь Д6 Enterprise

Зачем? У меня и так Delphi 7 Enterprise стоит.

> тебя 300 кб кода сильно заботят ?

Очень заботят. Это тупость и тормознутость делать сервис без картинок (и прочих ненужных ресурсов) больше 150 кБ. Тот же svchost.exe весит 12,5 Кб.

> как же ты заглянул ?

Обыкновенно!

> я так понял, у тебя Д6 Персонэл установлен ?

Не так понял. См. тему топика ^: "Сервисы в Win2k [D7, Win2k, WinXP]".

> а если и заглянул - что увидел там ?

Увидел, что пустой (в смысле только стандартный код) компиленный сервис весит 402 Кб.

> открываешь хэлп и изучаешь применение ф-ций OpenSCManager, OpenService, ControlService .. там и находишь ответ на вопрос

Я же говорил, что открывал - нихера там нет - там не сказано как прописыать сервис в систему.

> это как ?)

А вот так! Тебе что, еще нужно рассказывать как приложения с помощью :( формы грохать?

> даже тааак !?

Вот так!

> ну что ж, с тебя ящик пива

Чует мое сердце, не заработаешь ты его!

> function ServiceProc(argc : DWORD;var argv : array of PChar): DWord;
begin
Result := NO_ERROR;
end;


Ты затупан! Мне, во-первых, нужна функция function ServiceInitialization(argc,argv,SpecificError): DWORD, а во-вторых, я и так заместо нее 0 прописывал. А сервис все равно не работает, а точнее запускается, а через 10 сек сам вырубается.

> хэлп Win32 Programmer"s Reference штатно поставляется с Д6

Это знаю!

> ищи лучше

По установке и запуску сервиса, там ничего нет.


 
Digitman ©   (2004-02-04 08:09) [16]

так. устал я с тобой тут пререкаться попусту
разговор короткий - вперед к учебникам и в MSDN !


 
sniknik ©   (2004-02-04 08:58) [17]

> Ты затупан!
слово то какое, красивое даже. :о))) только не тому человеку применительно сказано. (ты так лутше перед зеркалом скажи, даже почаще говори, садись по утрам и повторяй в качестве аутотренинга, для снятия с себя груза излишнего самомнения)

в той статье (в начале упоминается) все грамотно расписано, если не понимаеш твои проблемы. у меня к примеру ни одной не возникло когда писал сервис для примера на WinApi (первый и единственный раз кстати, надобности в таком не возникало более, кроме первого раза из интереса), писал по тойже самой статье(основа, +все что смог найти в инете дополнительно) то что получилось и предлагал тебе посмотреть (ссылка в сылке).

p.s. а спориш и чтото доказываеш ты совершенно зря, ведь у тебя не работает, а ты пытаешся доказать что у тебя правильно, и неправильно пишет тот человек у которого как раз работает. абсурд.

> Ты чё, меня за ламо считаешь или как?
ламо ты и есть. стиль разговора ламерский, а уж обиды при малейшем подозрении на то что чегото не знаеш очень показательны и очень по ламерски.


 
dr Tr0jan ©   (2004-02-04 14:15) [18]

2 Digitman ©:

> вперед ... в MSDN !

Вот его то, как раз и нету. Не дают, а купит накладно получается. Ничёё, может кто-нить другой объяснит как этот сервис сделать.

2 sniknik © :

> ты так лутше перед зеркалом скажи, даже почаще говори, садись по утрам и повторяй в качестве аутотренинга

Я это и так делаю, шутка :).

> предлагал тебе посмотреть (ссылка в сылке)

а вот за это тебе большой респект!

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

Дело не том, что он (не)правильно пишет, а втом что не может объяснить то что, якобы знает.

> а уж обиды при малейшем подозрении на то что чегото не знаеш очень показательны и очень по ламерски

И какие еще обиды? Я вообще-то извинился потом: Таким макаром у нас получился не форум, а обливание грязью, поэтому забудем старые обиды и примемся за дело. А "споришь" пишется с мягким знаком :).


 
Digitman ©   (2004-02-04 14:25) [19]


> Вот его то, как раз и нету


чушь
в форум обращаешься ? значит, имеешь доступ в глоб.сеть ? значит, ресурс у тебя всегда перед носом - msdn.microsoft.com


> не может объяснить то что, якобы знает.


я не намерен тут тебе читать лекцию про алгоритм организации "от и до" сервиса на NT-платформе

а на конкретные вопросы ответить - это пожалуйста

ты спросил, как программно инсталлировать сервис ? я ответил - подробности в хэлпе или msdn, см. ф-цию CreateService()

спросил, как программно управлять уже установленным сервисом ? я опять же ответил - ф-ции OpenSCManager, OpenService, ControlService

что еще непонятно ?


 
Digitman ©   (2004-02-04 14:30) [20]

и не надо мне гнуть, что хэлпа Win32 Programmer"s Reference у тебя в Д7 нет в помине или тем там таких не имеется ... все там есть ! абсолютно все ! и вполне достаточно для изучения и понимания концепции программной организации и управления сервиса... а что там упущено из виду - вот тогда добро пожаловать в форум !


 
sniknik ©   (2004-02-04 14:50) [21]

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

> А "споришь" пишется с мягким знаком
не с мягким а через щ. но это неважно. (и не оспаривается, как получается так и пишу)


 
dr Tr0jan ©   (2004-02-05 02:45) [22]

2 Digitman ©:

> значит, ресурс у тебя всегда перед носом - msdn.microsoft.com

Чё-то я там исходников не видел: service.c, service.h и прочие.

> а на конкретные вопросы ответить - это пожалуйста

Так я их конкретно и задал.

> ты спросил, как программно инсталлировать сервис ? я ответил

Я еще не только это спрашивал (см. вопрос ^): Как запускать этот сервис, и сделать так чтобы он прописался в системе, и чтобы удалился из оной (хотя бы куда пихать exeшник, и куда в реестре что прописывать - типа хочу сделать инсталляшку и анинсталляшку этого сервиса)?

> что еще непонятно ?

Да, как удалять сервис из системы?

> хэлпа Win32 Programmer"s Reference у тебя в Д7 нет в помине или тем там таких не имеется

А я такого не говорил, все у меня есть: полная установка Borland Delphi7 Enterprise вместе со всеми хэлпами.

> а что там упущено из виду - вот тогда добро пожаловать в форум !

Вот-вот, там упущено из виду: удаление сервиса из системы.

2 sniknik ©:

> не забудь спасибо сказать

Не забуду: Всем, кто помог мне, большое СПАСИБО .


 
dr Tr0jan ©   (2004-02-05 02:46) [23]

Но все-таки чё это за функция: function ServiceInitialization(argc,argv,SpecificError): DWORD


 
Digitman ©   (2004-02-05 08:30) [24]


> Чё-то я там исходников не видел: service.c, service.h и
> прочие.


а я тебе и не рекомендовал их там искать

в MSDN есть описание ВСЕХ ф-ций, относящихся к программированию сервисов

что, впрочем, почти в том же есть и в твоем хелпе


> как удалять сервис из системы?


DeleteService()


> я такого не говорил, все у меня есть: полная установка Borland
> Delphi7 Enterprise вместе со всеми хэлпами.


Тогда на кой ляд ты цитировал статью в [12] ? если у тебя не Делфи6, а полная 7-я версия ? Ты по-прежнему продолжаешь утверждать, что в 7-ке нет никаких станд.классов для создания сервисов и у тебя нет возмодности заглянуть в их исходники ?


> чё это за функция: function ServiceInitialization


выкинь ее вообще, она не играет здесь никакой роли


 
panov ©   (2004-02-05 09:50) [25]

>dr Tr0jan ©

Предупреждаю - выбирай выражения.


 
dr Tr0jan ©   (2004-02-05 14:58) [26]

2 Digitman ©:

> в 7-ке нет никаких станд.классов для создания сервисов

Ну звиняй, ошибся!
Да дерьмо это на постном масле, а не средства создания сервисов.

2 panov ©:

> Предупреждаю - выбирай выражения.

Какие еще выражения: IF .. THEN .. ELSE, что ли :)?


 
Digitman ©   (2004-02-05 15:21) [27]


> ...на постном масле, а не средства создания сервисов


ну не ламо ли ты после таких заявлений ? вот уж воистину он самый)

я тебя что , понуждаю реализовывать свой сервис на базе станд.классов ?!

я тебе уже в который раз говорю, устал уже : вот у тебя исходники классов TService + TServiceApplication от Борланда, в этих исходниках Борланд делает практически ВСЕ касаемое создания, инсталляции и работы сервиса ! вот у тебя перед носом штатный Win32-хэлп, где можно почитать про ф-ции, назначение/параметры/результат которых тебе непонятны по ходу изучения тех или иных фрагментов исходников ..

что, это так трудно для "не ламо" внимательно изучить эти исходники и реализовать свой сервис по образу и подобию (в части ЦЕНТРАЛЬНОЙ логики !), выкинув все лишнее и несущественное, раз VCL тебя смущает ?!)

отсюда и делаю вывод - исходные тексты ты анализировать НЕ У-МЕ-ЕШЬ ! Что толку, что тебе приведут тело какой-нибудь ф-ции а-ля ServiceInitialization() ? Бестолку, думаю ..


 
dr Tr0jan ©   (2004-02-06 01:36) [28]

2 Digitman ©:

> в этих исходниках Борланд делает практически ВСЕ касаемое создания, инсталляции и работы сервиса ! вот у тебя перед носом штатный Win32-хэлп, где можно почитать про ф-ции, назначение/параметры/результат которых тебе непонятны по ходу изучения тех или иных фрагментов исходников ..

Я это уже давно почитал, еще как sniknik © мне сказал про ссылку, я додумался в Delphi на юнит Ctrl нажать, дело в том, что там комментов нет, ничего непонятно. Это уже давно доказано, что если один программер написал программу, то другому понять ее без комментариев не дано, ну или почти не дано. Я там разбраться не мог, уж слишком кода было много.

> отсюда и делаю вывод - исходные тексты ты анализировать НЕ У-МЕ-ЕШЬ !

Без комментариев, увы, не смог.


 
dr Tr0jan ©   (2004-02-06 01:36) [29]

2 Digitman ©:

> в этих исходниках Борланд делает практически ВСЕ касаемое создания, инсталляции и работы сервиса ! вот у тебя перед носом штатный Win32-хэлп, где можно почитать про ф-ции, назначение/параметры/результат которых тебе непонятны по ходу изучения тех или иных фрагментов исходников ..

Я это уже давно почитал, еще как sniknik © мне сказал про ссылку, я додумался в Delphi на юнит Ctrl нажать, дело в том, что там комментов нет, ничего непонятно. Это уже давно доказано, что если один программер написал программу, то другому понять ее без комментариев не дано, ну или почти не дано. Я там разбраться не мог, уж слишком кода было много.

> отсюда и делаю вывод - исходные тексты ты анализировать НЕ У-МЕ-ЕШЬ !

Без комментариев, увы, не смог.


 
dr Tr0jan ©   (2004-02-06 09:07) [30]

Большое спасибо Всем за помощь в разработке сервисов!!!
И давайте больше не будем обливать друг-друга грязью ("Ты ламо." - "Нет, это ты ламо." - "Нет, я же говорю: все таки ты ламо.")
Теперь прошу помощь в доработке этого сервиса, как TCP-сервер:
http://delphimaster.net/view/4-1075355181/


 
dr Tr0jan ©   (2004-02-06 09:07) [31]

Большое спасибо Всем за помощь в разработке сервисов!!!
И давайте больше не будем обливать друг-друга грязью ("Ты ламо." - "Нет, это ты ламо." - "Нет, я же говорю: все таки ты ламо.")
Теперь прошу помощь в доработке этого сервиса, как TCP-сервер:
http://delphimaster.net/view/4-1075355181/


 
dr Tr0jan ©   (2004-02-06 09:16) [32]

Уупс, извините:
http://delphimaster.net/view/4-1075355181/


 
dr Tr0jan ©   (2004-02-06 15:03) [33]

Опять извините: http://delphimaster.net/view/4-1075355181/



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.041 c
14-1081916514
LaidBack
2004-04-14 08:21
2004.04.11
Помогите опознать исполнителя песни:


1-1080123367
аппельсин
2004-03-24 13:16
2004.04.11
запрос к дереву


4-1075891076
RDen
2004-02-04 13:37
2004.04.11
Как узнать текущие параметры панели задач


8-1075969776
nike
2004-02-05 11:29
2004.04.11
winamp (in_mp3.dll, out_wave.dll) + delphi


3-1079080838
T{}r(l-l
2004-03-12 11:40
2004.04.11
Проблема с output-параметрами в ADO