Regatul Delphi

Cum de a scrie servicii pe Delphi

Salvați modulele recepționate pe disc. Am salvat serviciul ca main.pas, iar proiectul - myservice.pas. Redenumiți serviciul la myservice. Apoi, adăugați o fereastră la proiect. Aceasta va fi o fereastră care arată starea serverului și informații despre program. Salvați modulul ca format. Din moment ce vom rula serviciul nostru în modul unui program simplu, trebuie să facem o distincție între aceste două moduri. Pentru a face acest lucru, puteți crea o variabilă globală în modulul aboutform. L-am sunat din serviciu: boolean. Dacă serviciul este pornit, este adevărat dacă programul este fals. Aici este modulul de serviciu:

După cum puteți vedea, este aproape gol. Există doar 2 agenți de manipulare pentru a porni și a opri serviciul. Iată codul pentru:

Pictograma poate fi adăugată numai începând de la ferestrele 95 sau windows nt4 (după cum se știe, are un desktop de la ferestrele 95). Prin urmare, mai întâi trebuie să verificați versiunea ferestrelor și, dacă este mai mare decât nt 3.51, puteți adăuga. Se adaugă o pictogramă prin apelarea shell-ului api - shell_notifyicon. Pentru a face acest lucru, pur și simplu completați structura tnotifyicondata și faceți apelul corespunzător. După cum puteți vedea, icoana în sine poate fi luată de la aproximativ. Acest lucru este bun, pentru că atunci puteți face pictograma 16X16, mai degrabă decât 32X32. Această pictogramă va arăta mai bine în bara de activități. ucallbackmessage va fi trimis de shell ori de câte ori unele evenimente apar cu mouse-ul.

Aici cerem shell-ului să elimine pictograma din bara de activități.

Metoda wmmidasicon este declarată ca un manipulator de evenimente pentru evenimentul wm_midasicon. Aici este verificat care eveniment sa întâmplat. Dacă faceți dublu clic pe pictogramă, este afișată fereastra despre, dacă este apăsat butonul drept al mouse-ului, este afișat un meniu pop-up. Acest meniu poate fi plasat direct pe fereastra aproximativă. Există trei puncte: închidere, delimitare, configurare, aproximativ. Ne vom întoarce mai târziu.

Când fereastra este creată, versiunea ferestrei este bifată, atunci dacă programul este pornit ca un serviciu, elementul din meniu se închide și separatorul sunt invizibile. Acest lucru se face în mod special pentru a opri serviciul poate fi numai în modul standard din applet-ul de administrare a computerului. Apoi, se adaugă o pictogramă.

Când fereastra este distrusă, pictograma este ștearsă.

În caz contrar, dacă este lansată ca o aplicație, închiderea ferestrei nu trebuie să închidă programul, dar dacă faceți clic pe elementul din meniu de închidere, programul trebuie închis. pentru că vom arata forma modal, atunci va fi, dar este mai bine sa lasati acest cod sa fie complet sigur.

În formularul despre care există un buton pentru a apela ajutorul. pentru că aplicația pentru serviciu nu are metode de a apela fișierul de ajutor, atunci a trebuit să utilizați api. Aici id_cont este definit în elementul de fișier de ajutor, iar myserver.hlp este numele fișierului de ajutor.

Pe formular există două etichete cu suport pentru inscripție și www.myserver.ru pentru a merge la site-ul dezvoltatorului.

Elementul de meniu se închide. Atunci când aplicația este lansată, ștergerea ferestrei de aproximativ închide programul, deoarece este fereastra principală.

Elementul de meniu despre - arată doar forma, adică în sine.

Configurația elementului de meniu. Iată o modalitate de a rezolva problema. Adesea, aplicațiile din panoul de control sunt utilizate pentru a gestiona setările de serviciu. Pentru a face acest lucru, trebuie doar să vă scrieți cpl. Dar nu aș vrea să repet tot acest cod în server. După cum știți, cpl este un DLL obișnuit, deci nu trebuie să exportați nici o metodă din ea și să o încărcați dinamic ...

În final, codul proiectului de servicii:

Rețineți că utilizările utilizează un modul de formular care nu este inclus automat în proiect. Avem nevoie de el pentru a rula serverul nostru ca o aplicație.

Verificați linia de comandă pentru instrucțiuni pentru instalarea sau eliminarea serviciului.

Funcția verifică dacă aplicația rulează ca serviciu. Acest cod este pur și simplu preluat din modulul scktsrvr.dpr. Apropo, dacă înțelegeți acest proiect, puteți scrie servicii chiar și pe delphi 2, 3.

Dacă aplicația este pornită ca serviciu sau dacă doriți să o înregistrați ca un serviciu, urmăm calea ca în proiectul creat implicit de către delphi. Singurul lucru care este mai bine să indice în mod explicit ce aplicație folosim: în svcmrg este un serviciu, și în formă s este o aplicație simplă. Dacă pornirea merge ca o aplicație simplă, specificăm că nu trebuie să afișăm formularul principal, ci despre formularul principal (primul creat), creăm formularul de serviciu. Este important ca serviciul să fie un tatamodul. Și atunci când o creăm de la punerea în aplicare, serviciul nu va fi pornit. Acest lucru este bun - vom avea doar un modul de date adecvat j

Puteți începe deja și faceți clic pe meniu, închideți-vă, înregistrați-vă și începeți-vă ca un serviciu - totul funcționează. Dar serviciul nostru este gol și nu face nimic. Ce ar trebui să faceți este să decideți.
În cele din urmă, puteți înregistra serviciul cu comanda myserver / install și ștergeți înregistrarea - myserver / uninstall.
Mult noroc în dezvoltarea serviciilor!

Articole similare