Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Service app rađena u D2007

[es] :: Pascal / Delphi / Kylix :: Service app rađena u D2007

[ Pregleda: 2903 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Service app rađena u D200704.12.2008. u 08:22 - pre 187 meseci
Znam da na net-u ima dosta upustava kako se radi servis pomoću Delphi-a, ali je malo vremena za učenje, a inaće se na bavim tom vrstom programa.

Moram napraviti prog. koji će u zadato vrijeme spojiti se na bazu, izdvojiti određene podatke, kreirati nekoliko txt file-ova i postaviti ih na ftp. Imam normalin win32 prog. koji to radi, a sada ga treba preraditi da radi kao servis.

Zahtjev je da se vrti kao servis.

Pokušao sam napraviti, nešto jednostavno, ali: kada pokrenem program, u servisima se pojavi na nekolilko sekundi i odmah nestane.

Da li netko zna u čemu je problem ili možda ima kakav jednostavan source koji mi može poslati?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Service app rađena u D200704.12.2008. u 10:03 - pre 187 meseci
Napravi novi Service projekat (File/Other/New-Service application), dodaj OnExecute handler i u njemu dodaj potrebnu obradu ili izdvoj postojeći kod u novu klasu (može i thread) koju ćeš pozvati iz tog eventa, ne zaboravi da dodaš i ProcessRequests.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Service app rađena u D200704.12.2008. u 12:08 - pre 187 meseci
savkicu, hvala

Ovo mi je malo preskračen opis.
Gdje da dodam ProcessRequests?

Ako imaš (ili možeš napraviti :) ) ljusku - app koja će ostati kao seris, a u proc u kojoj se izvrašava ono što treba upisati samo komentar npr:
// ovdje ide kod


Hvala unaprijed
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
194.106.185.*



+49 Profil

icon Re: Service app rađena u D200704.12.2008. u 12:18 - pre 187 meseci
Rad sa servisnom aplikacijom je jako slican kao i sa svakom drugom aplikacijom. Stavi onSstart


procedure TMojaAplikacija.ServiceStart(Sender: TService;
var Started: Boolean);
begin
startTimer();
started:=true;

end;

procedure TMojaAPlikacija.startTimer();
begin
timer.interval:=vrednost osvezavanja;
end;

Dodaj on timer event i kada se uslovi poklope, nek aplikacija izvuce podatke i obradi ih (taj deo imas uradjen koliko sam razumeo)

ERROR974
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Service app rađena u D200704.12.2008. u 18:36 - pre 187 meseci
Kreirao sam app File->New->Other->Delphi Projects->Service Application

u unit1 koji je automatski kreiran, u Events OnStart sam dodao Started := true;

tako da imam:

Code:

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
   Started := true;
end;


Nakon Run iz Delphi-a ili compile pa nakon toga pokretanje programa Project1.exe
u Task Menageru->Processes se pojavi Project1,
u Task Menageru->Services se ne pojavi ništa novog

Nakon cca 10 sekundi, program se zaustavi sam i nestane iz procesa. Isto se dogodi bez obzira da li je startan kao program ili iz Delphi-a.

Što mi nedostaje?
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.ptt.yu.



+49 Profil

icon Re: Service app rađena u D200704.12.2008. u 18:40 - pre 187 meseci
Service se ne pokrece tako sto startujes project exe. U start meniju idi na browse, nadji svoj exe i dodaj Project.exe /install. Nakon toga ces imati u servisima service Project1 ili sta vec, pa ga odatle startujes.
ERROR974
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Service app rađena u D200704.12.2008. u 18:46 - pre 187 meseci
Kako postaviti da se starta svaki pout nakor restarta kompa?
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.ptt.yu.



+49 Profil

icon Re: Service app rađena u D200704.12.2008. u 18:51 - pre 187 meseci
Taj deo se regulise u servisima pod opcijom startup type, znaci stvar je windowsa a ne samog programiranja
ERROR974
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Service app rađena u D200704.12.2008. u 19:09 - pre 187 meseci
Servisi se prvo instaliraju:
Project1.exe /install
... pa se tek onda vrsi startovanje, pauziranje, zaustavljanje i sl.

Deinstaliraju se slicno:
Project1.exe /uninstall

(mozes iz konzole da pokrenes instaliranje/deinstaliranje ili najbolje napravi dva shortcuta sa parametrima /install i /unistall, da bi lakse testirao program)
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Service app rađena u D200704.12.2008. u 19:14 - pre 187 meseci
A mozes da kontrolisanje servisa: startovanje, zaustavljnje, pauziranje, nastavljanje i korisnicki definisane poruke odradis i kao zasebnu aplikaciju.

Ovde mozes da pogledas jedan DEMO koji sam radio na slicnu temu:
http://www.elitesecurity.org/t253787-0#1525450

Iako je kod u C++ Builderu, sve je u VCL-u pa ces se lako snaci oko detalja.



 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Service app rađena u D200704.12.2008. u 19:42 - pre 187 meseci
Zahvaljujem na odgovorima. Idem to isprobati. Valjda će raditi :)

Još jedno pitanje: pristup bazama (Firebird) je normalan, kao u običnom programu?




A lijepo sam to mogao napraviti kao normalni prog bez sveg s...a
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.ptt.yu.



+49 Profil

icon Re: Service app rađena u D200704.12.2008. u 19:44 - pre 187 meseci
Pristup FB je standardan naravno.
ERROR974
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Service app rađena u D200705.12.2008. u 14:43 - pre 187 meseci
Naparvio sam service. Kad sam imo samo ljusku, mogao sam ga startati.

Dodao sam procedure za učitavanje parametara iz txt file-a. Koristim:

stringlist.loadfromfile('ime file-a');
parametar := stringlist['ime parametra'];

Dodao sam i konekciju na fdb bazu, koju starta timer i koja se ne otvara...

Install prođe ok (recimo, jer se serivce ne starta)

u servisima kad pokušam startati svoj srvis javi mi sljedeću poruku:

"The Service1 service on Local Computer started and then stopped. Some services stop automatically if they are not use by other services or programs."

Izbacio sam pozivanje bilo koje procedure, a timer mi je disabled.


kreirao sam proc:
Code:

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
   Started := true;
   WriteLog('*** Load service: ' + DateTimeToStr(now));
end;

procedure TService1.WriteLog(Value: string);
var tf: TextFile;
begin
   try
      AssignFile(tf, 'c:\program files\moj_servis\webupdate.log');
      Append(tf);
      Writeln(Value);
   finally
      Close(tf);
   end;
end;


file: 'c:\program files\moj_servis\webupdate.log' postoji, ali se ne upiše tekst koji bi, pretpostavljam trebao čim uđe u proceduru ServiceStart.

Pomoć !!!


 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.imlek.co.yu.



+49 Profil

icon Re: Service app rađena u D200705.12.2008. u 14:48 - pre 187 meseci
Koliko se ja secam, txt ili ini fajl koji pozivas bi trebao da bude u system32.
ERROR974
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Service app rađena u D200705.12.2008. u 15:14 - pre 187 meseci
Citat:
franjo_tahi: Još jedno pitanje: pristup bazama (Firebird) je normalan, kao u običnom programu?

Da, ali ako tvoj servis radi na istoj masini kao i FB server na koji se povezuje, moras postaviti Dependency za svoj servis, tj da kazes da tvoj servis zavisi od Firebird servisa, da se ne dogodi da pokusas da pristupi podacima dok FB server ne radi. Dependency postavljas, pogodi gde - property Dependencies. Dodaj jedan i u listi izaberi Firebird Server.

Citat:
franjo_tahi: file: 'c:\program files\moj_servis\webupdate.log' postoji, ali se ne upiše tekst koji bi, pretpostavljam trebao čim uđe u proceduru ServiceStart.

Naravno da se ne upise kada ne pises u fajl vec na standardni izlaz. writeln(tf, Value);
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Service app rađena u D200705.12.2008. u 17:34 - pre 187 meseci
> u servisima kad pokušam startati svoj srvis javi mi sljedeću poruku:
> "The Service1 service on Local Computer started and then stopped. Some services stop automatically if they are not use by other services or programs."

TService mora imati OnExecute handler, bez njega nema šta da radi i može samo da se zatvori.


 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Service app rađena u D200705.12.2008. u 18:34 - pre 187 meseci
^
Citat:

TService mora imati OnExecute handler, bez njega nema šta da radi i može samo da se zatvori.

Ako se ne varam, ipak postoji izuzetak od ovog pravila.
Ako se u OnStart pokrene zaseban thread ili ako se koristi TIdTCPServer u servisnoj aplikaciji, u njemu se moze handle-ovati sav saobracaj.

Inace, primetio sam da ljudi poprilicno pogresno koriste OnExecute() i otuda vecina problema.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Service app rađena u D200705.12.2008. u 19:43 - pre 187 meseci
> Ako se ne varam, ipak postoji izuzetak od ovog pravila.
> Ako se u OnStart pokrene zaseban thread ili ako se koristi TIdTCPServer u servisnoj aplikaciji, u njemu se moze handle-ovati sav saobracaj.

TService spawnuje novi thread i u kontekstu tog threada se izvršava OnExecute, kada se završi taj thread i TService završava. Taj korišćeni thread je standardni TThread naslednik i on se automatski završava po okončanju Execute procedure što se odmah dešava pošto nema OnExecute handlera.

Spawnovanje novog threada u OnStart bi imalo uticaja na opisani proces samo ako se OnStart nikada ne završi, ali time se blokira čitav servis i on više ne može obradjivati poruke (zapravo moguće je ali to zahteva ručno hakovanja).

TIdTCPServer startuje jedan listener thread i po jedan thread za svaku klijentsku konekciju, on jeste dovoljan za handlovanje klijenata, međutim OnExecute i ProcessRequests u njemu su obavezni.




 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Service app rađena u D2007

[ Pregleda: 2903 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.