ПредишенСледващото

Програмиране Windows Service в Делфи

Уважаеми експерти!
Prompt, ако Кой е включен:
1. Къде мога да видя
Програмиране Windows Service в Делфи с примери?
Може би имате един пример?
2. Има формуляр за кандидатстване. Как да го направя услуга?

С благодарности # XA0; # XA0; # XA0; Леонид Fedko.


> Заявление. Как да го направя услуга?

Променете "един замах" готов GUI-заявлението е не само желателно в служба, но това често е невъзможно.

Това са един пример. File-> новообза-> Други-> приложение Service

употреби
# XA0; Windows, съобщения, SysUtils, Уроци, графики, контроли, SvcMgr, диалогови прозорци;

тип
# XA0; TService1 = клас (TService)
# XA0; # XA0; процедура ServiceExecute (подателя: TService);
# XA0; частен
# XA0; # XA0;
# XA0; обществен
# XA0; # XA0; функция GetServiceController: TServiceController; отменят;
# XA0; # XA0;
# XA0; край;

Var
# XA0; служба1: TService1;

процедура ServiceController (CtrlCode: DWORD); stdcall;
започвам
# XA0; Service1.Controller (CtrlCode);
приключи;

функционира TService1.GetServiceController: TServiceController;
започвам
# XA0; Резултат: = ServiceController;
приключи;


процедура TService1.ServiceExecute (подателя: TService);
започвам
# XA0; # XA0; докато не се направи Self.Terminated
# XA0; # XA0; # XA0; започне
# XA0; # XA0; # XA0; # XA0; ServiceThread.ProcessRequests (False);
# XA0; # XA0; # XA0; # XA0;
# XA0; # XA0; # XA0; # XA0; край;
# XA0; # XA0; # XA0; край;
приключи;

> печеливша мнения

И тук е как с минимални усилия за обмен на съобщения с молба delfovym услуга? Не мисля, че нещо по-добро, отколкото да се създаде един невидим прозорец и изпращане на съобщения до него.

Ако не се нуждаете без прозорци.
Публикувайте МБ Това не изпраща само през прозореца, но нишката.
Вижте. PostThreadMessage ().
Единственото ограничение - асинхронен горе Fct.


> Не е необходимо без прозорци.
> Публикувайте МБ Това не изпраща само през прозореца, но нишката.
> Вж. PostThreadMessage ().
> Единственият уговорката - гореспоменатата асинхронни
> Fct.

На теория, аз го знам, но на практика. Как да се справя с потока от услугата? Как да вмъкнете съобщение отговор манипулатор нишка на потребител събитие? Не става дума за "услуга от самото начало", но delfovom за кандидатстване услуга.


> Единственият уговорката - гореспоменатата асинхронни
> Fct.

Малката разбрани. Прозорец функция - синхронен?


> Как да се справя с потока от услугата?

За да изпратите конец съобщение не се нуждае от дръжка и конец за самоличност.

Услугата нишка може да записва своя идентификатор, например, в МФР.


> Как да вмъкнете отговор на потребителя в манипулатор съобщение нишката на
> Събитие?

цикъл трябва да се организира така (като опция):

макар и да не е прекратен започвайте
# XA0; WaitMessage;
# XA0; ако PeekMessage (Msg, -1, TM_FIRST_MSG, TM_TM_LAST_MSG, PM_REMOVE) след това
# XA0; # XA0; изпращане (Msg.Message)
# XA0; останало
# XA0; # XA0; ProcessRequests (False);
приключи;


> Window функция - синхронен?

Не прозорци F-ТА, и F-ТА SendMessage ().
Тя връща контрола след целевият прозорец лечение изпращане на съобщения, докато PostThreadMessage () изпраща съобщение и след това се връща.

Чудя се защо е толкова трудно ignorituyut контакти, с които можете да много лесно да се реализира това е съобщението? Плюс това - ако искате - дори и дистанционно обслужване администрация?

> Автор на услугата може да записва своя идентификатор, например, в МФР.

И така А MMF - какво е това?


> Цикъл трябва да се организира по този начин

Това е разбираемо. Но как да се получи това да Service Application?


> Не прозорци F-ТА, и F-ТА SendMessage ().

Взех го. Не разбрах веднага какво синхронност притеснения.

Memory Картографирани файла

см. CreateFilemapping () + MapViewOfFile ()


> Как да се получи това да Service Application?

Такъв цикъл трябва да се появяват в продукцията TService.OnExecute

Ако нямате нужда от дистанционно взаимодействие с услугата, подложките Едва ли има оправдани.

И ако това е необходимо, предмет хомогенни set.oper.sredy разумни NamedPipes употреба. И в хетерогенна тръбата може да бъде juzat - * Никс системи подкрепа тръба технология.

> Памет Картографирани файла

Ясно. Само със съкращението, не се изправи. Само че в този случай MMF. Не е от пистолет на врабчета?


> Тази линия трябва да се появи в манипулатор TService.OnExecute

Да. Ще се опитам, благодаря ви.


> MMF в този случай. Не е от пистолет на врабчета?

Може и така.
Но progr.realizatsii е по-лесно в сравнение с други методи за "издателство" на този вид INF-ТА.

Ето още един вариант на "публикуване". за главното приложение на прозореца услуга инсталиране Св-в (вж. SetProp), е низ с текстово представяне на услугата на конеца ID. След това всеки процес от същия работния плот може да чете този Saint на (GetProp) Търсене прозорец. Но това е оправдано само в случаите, когато прилагането на услуги изпълнява една-единствена услуга, не много услуги (което е нормално).

Аз все още силно препоръчва да не се използва interprotsessnogo механизъм взаимодействие на Win-съобщения, именуване на тръбата.


> За да не се гърчи и съща машина контакти мрежа

Pipe също не е "дърпане". Но не прекарват времето си на работното място не е най-бързите транспортни протоколи на базата на IP

> По-добре е да се направи в няколко варианта

По-добре е да се направи един.

> СОХ тръба. 0)

До се оказва, че програмата и 98 уиндсърфинг трябва да работи. - (

> Взаимодействие на клиент и сървър чрез тръба и след това
> - бам! - Оказва се, че под 98 не се говори.

Така че, тя трябва да бъде използвана, за да поеме неназован тръба.

> Така че, трябва да са били използвани, за да поеме неназован тръба.

Добре. Ако все още се случи на едно такова събитие - аз ще знам. -)

Win9x не прилага механизъм на сървъра тръби и тръбни клиенти, които работят там доста успешно.

Аз съм наясно. Но това беше необходимо на клиента и сървъра може да работи на същата машина, или по-различно. С една дума, аз говоря за конкретен случай, а не за "тръби като цяло." ;-)

Свързани статии

Подкрепете проекта - споделете линка, благодаря!