Windows szolgáltatás programozás Delphi

Programozás Windows Service Delphi

Tisztelt szakértők!
Azonnali, ha ki van szó:
1. Hol láthatom
Programozás Windows Service Delphi példákkal?






Lehet, hogy egy példát?
2. jelentkezési lapot. Hogyan készítsünk neki egy szívességet?

köszönettel # XA0; # XA0; # XA0; Leonid Fedko.


> Jelentkezési lapot. Hogyan készítsünk neki egy szívességet?

Alter az „egy csapásra” kész GUI alkalmazás nem csak kívánatos a szolgáltatást, de ez gyakran lehetetlen.

Ezek egy példát. Fájl-> Új-> Egyéb-> Service alkalmazás

felhasználások
# XA0, a Windows, az Üzenetek, SysUtils, osztályok, grafika, vezérlők, SvcMgr, párbeszédablakok;

típus
# XA0; TService1 = osztály (TService)
# XA0; # XA0; eljárással ServiceExecute (Sender: TService);
# XA0; magán-
# XA0; # XA0;
# XA0, köz-
# XA0; # XA0; funkció GetServiceController: TServiceController; felülbírálhatja;
# XA0; # XA0;
# XA0; end;

var
# XA0; Service1: TService1;

eljárás ServiceController (CtrlCode: DWord); stdcall;
kezdődik
# XA0; Service1.Controller (CtrlCode);
végén;

működni TService1.GetServiceController: TServiceController;
kezdődik
# XA0; Eredmény: = ServiceController;
végén;


eljárás TService1.ServiceExecute (Sender: TService);
kezdődik
# XA0; # XA0; miközben nem Self.Terminated csinálni
# XA0; # XA0; # XA0; kezdődik
# XA0; # XA0; # XA0; # XA0; ServiceThread.ProcessRequests (hamis);
# XA0; # XA0; # XA0; # XA0;
# XA0; # XA0; # XA0; # XA0; end;
# XA0; # XA0; # XA0; end;
végén;

> Win-üzenete

És itt van, hogyan minimális erőfeszítéssel üzeneteket váltani delfovym szolgáltatás alkalmazást? Nem hiszem, hogy bármi jobb, mint egy láthatatlan ablakot, és üzenetet küldeni rá.

Nem kell nincsenek ablakok.
Hozzászólás mb Ez küldött nem csak az ablakon, de a cérna.
Lásd. PostThreadMessage ().
Az egyetlen korlátozás - aszinkron fenti Fct.


> Nem kell nincsenek ablakok.
> Hozzászólás mb Ez küldött nem csak az ablakon, de a cérna.
> Lásd. PostThreadMessage ().
> Az egyetlen kikötés - a fent említett aszinkron
> Funkcióban.

Elméletben tudom, de a gyakorlatban. Hogyan juthat el a kart a szolgáltatás folyam? Hogyan kell behelyezni felvezető menet üzenete, egy felhasználói eseményt? Ez nem a „szolgáltatás az alapoktól”, de a szolgáltatás alkalmazás delfovom.


> Az egyetlen kikötés - a fent említett aszinkron
> Funkcióban.

Kis érteni. Egy ablak funkció - szinkron?








> Hogyan juthat el a kart a szolgáltatás folyam?

Hogy küldjön egy üzenetet nem kell fogantyú és szálazonosítóból.

A menet szolgáltatás feljegyezhetik azonosítót, például az MMF.


> Hogyan kell behelyezni a választ a felhasználó a szál üzenete felvezető
> Event?

ciklust kell szervezni, mint ez (opció):

miközben nem Lezárt nem kezdődik
# XA0; WaitMessage;
# XA0; ha PeekMessage (MSG, -1, TM_FIRST_MSG, TM_TM_LAST_MSG, PM_REMOVE), majd
# XA0; # XA0; Dispatch (Msg.Message)
# XA0; máshol
# XA0; # XA0; ProcessRequests (hamis);
végén;


> Ablakfunkció - szinkron?

Nem windows F-CIÓ, és az f-CIÓ SendMessage ().
Ez visszaadja a vezérlést a kezelés után célablak üzeneteket küldeni, míg PostThreadMessage () üzenetet küld majd visszatér.

Vajon miért olyan nehéz ignorituyut aljzatok, mellyel nagyon könnyen megvalósítható ez a kommunikáció? Plus - ha akarja - akár távoli adminisztrációs szolgáltatást?

> Menet a szolgáltatás feljegyezhetik azonosítót, például az MMF.

Szóval A PPA - mi ez?


> Cycle kell szervezni, mint ez

Ez érthető. De hogyan lehet ezt a Service alkalmazás?


> Nem windows F-CIÓ, és az f-CIÓ SendMessage ().

Megvan. Nem vettem észre azonnal, hogy mi a szinkronicitás aggályokat.

Mappolt fájl

cm. CreateFilemapping () + MapViewOfFile ()


> Hogyan lehet ezt Service alkalmazás?

Egy ilyen ciklust jelenik meg az eredményben TService.OnExecute

Ha nem kell a távoli interakció a szolgáltatás, a foglalat van aligha indokolt.

És ha szükséges, a tárgy homogén set.oper.sredy ésszerű felhasználása NamedPipes. És a heterogén cső is lehet juzat - * nix rendszerek támogatása cső technológia.

> Mappolt fájl

Tiszta. Csak rövidítéssel nem találkozott. Kivéve, hogy ebben az esetben a MMF. Nem a fegyvert verebek?


> Ez a hurok meg kell jelennie a felvezető TService.OnExecute

Igen. Megpróbálom, köszönöm.


> MMF ebben az esetben. Nem a fegyvert verebek?

Talán igen.
De progr.realizatsii ez könnyebb, mint más módszerek „kiadói” Az ilyen inf-CIÓ.

Itt egy újabb változata a „kiadói”. A főablak szolgáltatás alkalmazás telepítéséhez Sv-ben (lásd. SetProp), egy karakterlánc egy szöveges megjelenítése a menet azonosító szolgáltatásra. Ezután minden folyamat ugyanaz asztalon lehet olvasni ezt szentje (GetProp) Keresés ablakot. De ez csak akkor indokolt, abban az esetben, ha a szolgáltatás alkalmazás hajtja végre egységes szolgáltatás, nem egy csomó szolgáltatást (ami normális).

Azt is javasoljuk, hogy ne használja interprotsessnogo kölcsönhatás mechanizmusa win-üzenetek, megnevezve a csövet.


> Az ugyanazon a gépen aljzatok hálózat nem rángatózik

Pipe szintén nem „pull”. De nem töltenek időt a munka nem a leggyorsabb szállítási protokollok alapján IP

> Ez jobb, hogy nem egy pár lehetőség

Sokkal jobb, hogy tegye.

> COX cső. 0)

Amíg kiderül, hogy a program és a 98 szörf működnie kell. - (

> Reagálva a kliens és a szerver csövön keresztül, majd
> - bumm! - kiderül, hogy az a 98 nem beszél.

Tehát meg kell volna használni, hogy átvegye egy meg nem nevezett cső.

> Tehát meg kell volna használni, hogy átvegye egy meg nem nevezett cső.

Nos. Ha még mindig megtörténhet, hogy egy ilyen alkalommal - tudni fogom. -)

Win9x nem hajtja végre a szerver-pipe rendszer, és a cső az ügyfelek ott dolgozó meglehetősen sikeresen.

Tisztában vagyok. De ez szükséges volt, hogy a kliens és a szerver futhat ugyanazon a gépen, vagy más. Röviden, beszélek egy konkrét esetben, és nem a „csövek általában.” ;-)




Kapcsolódó cikkek