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

Windows Service Delphi7

[es] :: Pascal / Delphi / Kylix :: Windows Service Delphi7

[ Pregleda: 2601 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Windows Service Delphi712.06.2009. u 08:53 - pre 180 meseci
Potrebna mala pomoć oko kreiranja Windows Servisa pomoću Delphi7.
Servis sam kreirao koristeći SvcMgr unit, i sve se činilo sasvim OK.
Instalirao sam servis sa komandom <path>\program.exe /install i servis
bi se svaki put pokretao zajedno sa windows-om.
Medjutim, servis bi radio samo odredjeno vreme (otprilike nekih 15 sec)
a zatim bi prestao sa radom, ali bi njegov proces još uvek bio aktivan.
Inače servis bi trebao da radi sledeće:
osluškuje na serijskom portu podatke, pri stizanju podataka na com port
u zavisnosti od pristiglih podataka upisuje (ili ne) odredjene podatke u
bazu (FireBird 2.0). Još jedna stvar je čudna, kada pokrenem program
iz Delphi okruženja on takodje radi samo odredjeno vreme a zatim se
sam zaustavi. Što se tiče servisa on ima sledeća podešavanja:
AllowPause : True
AllowStop : True
Dependencies : None
ErrorSeverity : esNormal
Interactive : True
Load Group : None
OldCreateOrder : False
Password : None
ServiceType : stWin32
StartType : stSystem
Tag : 0
TagID : 0
WaitHint : -1

 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:11 - pre 180 meseci
Windows Servisi kreirani pomocu BCB/Delphi-ja tog doba (mada nisu prakticno uopste evoluirali ni u novijim verzijama) meni su radili sasvim pouzdano.

To mi govori da mora biti nesto u vezi samog koda.

Da li si implementirao vec neki kod ili se to gasenje dogadja i na osnovnom kodu servisne aplikacije?

Ono Interactive mozes postaviti na False, jer se sudeci po CodeGear newsgrupama ne preporucuje da servis ima svoj GUI u samoj servisnoj aplikaciji, vec da se implementira kao zasebna aplikacija.

Ima i jedna tema:
http://www.elitesecurity.org/t253787
... u kojoj samostavio mali demo kod a BCB, ali nece biti problema za razumevanje jer je VCL u pitanju.
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
194.106.185.*



+49 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:31 - pre 180 meseci
Ja sam u D7 napravio isti takav servis i nemam problema. Kao sto ti je X-files rekao, proveri jos jednom code. Inace meni osluskuje GSM modem i upisuje primljene podatke u bazu, a potom salje sms poruku. To tako radi vec vise meseci bez ikakvog problema.
ERROR974
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:35 - pre 180 meseci
Kao prvo hvala na brzom odgovoru.
Implementiran i kod u samoj servisnoj aplikaciji, koristio sam
File/New/Service Application. Kada kreiram prazan servis
(bez mog koda) stvar se ponavlja. Startujem program iz
Delphi-a i on radi nekih 15 sekundi a onda se sam zaustavi.
Što se tiče Interactive opcije postavio sam je na True da bih
mogao da vidim dokle program stigne i šta odradi.
Moj servis radi na sledeći način:
- po startovanju iz ini fajla pročita parametre za com port i bazu
- otvori com port i čeka podatke sa njega
- kada podaci stignu na osnovu njih upisuje podatke u bazu ili ne
i to bi bilo sve.
Ali to ne radi, ustvari radi samo iz Delphi okruženja nekih 15 sec.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:36 - pre 180 meseci
> Medjutim, servis bi radio samo odredjeno vreme (otprilike nekih 15 sec) a zatim bi prestao sa radom, ali bi njegov proces još uvek bio aktivan.

Da li si napisao kod u OnExecute tog servisa ili imaš poseban worker thread, ako ne to taman odgovara opisanoj situaciji.

 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
194.106.185.*



+49 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:38 - pre 180 meseci
Gde ti se nalazi ini fajl? Imaj u vidu da bi trebao da bude u systemskom folderu da bi to radilo kako treba.
ERROR974
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:43 - pre 180 meseci
@ Savkic
Nema koda na OnExecute event-u. Koristim TurboPower (APRO) komponente, i ceo kod se aktivira na DataPacket event OnStringPacket.
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:48 - pre 180 meseci
@ VIC
Mislim da nije problem u ini fajlu (on se nalazi u istom folderu kao i exe), jer prikažem na ekranu podatke koje program pokupi iz ini fajla i oni su OK.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:53 - pre 180 meseci
Savetujem da barem u fazi razvoja implementiras detaljne try/catch/finally sa sopstvenim LogMessage() koji ide u EventViewer, da utvrdis da li se bas sve odvija kako si zamislio. Nekada je greska banalna, a ne vidi se. Takodje proveri standardni EventViewer log, cesto pise sta se desilo.

 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 09:57 - pre 180 meseci
@ X Files
Sve moguće pišem u log fajlove, ima error log, event log baš sve što može čoveku da padne na pamet. Program u suštini radi ono što bi trebao ali onoliko dugo koliko on smatra da je potrebno :o(
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Windows Service Delphi712.06.2009. u 10:23 - pre 180 meseci
> Nema koda na OnExecute event-u. Koristim TurboPower (APRO) komponente, i ceo kod se aktivira na DataPacket event OnStringPacket.

Da li te komponente prave poseban thread koji se startuje u TService (OnStart npr.)? Ako ne, onda _moraš_ imati ili poseban thread ili kod u OnExecute, servis se završava kada se završi OnExecute.

Pogledaj: http://www.elitesecurity.org/t346346-0#2128946.
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 10:35 - pre 180 meseci
Pretpostavio sam da bi trebao nekako da zakucam OnExecute event, ali nisam uspeo. Slažem se sa tobom da bi greška trebala da bude tu negde, ali ni sam ne znam kako da zakucam taj event da bi servis ostao aktivan onoliko dugo koliko je podignut operativni sistem na kojem se izvršava. Prvo sam mislio da postoji neka podatna opcija prilikom instalacije servisa, ali ni to nisam uspeo da pronadjem (nešto takvo ima na Linux-ima gde prilikom startovanja nekog programa kažeš da se on izvršava -forever ili nešto slično).

[Ovu poruku je menjao salaczr dana 12.06.2009. u 12:26 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Windows Service Delphi712.06.2009. u 14:22 - pre 180 meseci
> Pretpostavio sam da bi trebao nekako da zakucam OnExecute event, ali nisam uspeo. Slažem se sa tobom da bi greška trebala da bude tu negde,
> ali ni sam ne znam kako da zakucam taj event da bi servis ostao aktivan onoliko dugo koliko je podignut operativni sistem na kojem se izvršava.

Code:

OnExecute procedura:

  while not Terminated do
  begin
    Sleep(200);

    // Ne znam kako ti izgleda ta komponenta i sta ona radi, ako nije u posebnom threadu onda ovde trebas dodati kod koji ce citati 
    // ili slati podatke na COM port.

    ServiceThread.ProcessRequests(False);      
  end;  


 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 15:24 - pre 180 meseci
Sam sebe počinjem da nerviram.
Pokušao sam onako kako si mi ti predložio, ali ni to nije donelo rešenje. Imam osećaj da je neka glupost.
Code:

while not Terminated do
  begin
    Sleep(200);

    ComPort.Open := True;

    ServiceThread.ProcessRequests(False);      
  end;  


ovako izgleda kod koji sam probao. Ne znam da li treba jo[ nešto dodati, jer komoponenta koju koristim samo osluškuje podatke sa com porta a druga komponenta DataPacket se okida kada na selektovani com port stigne string sa odgovarajućim početnim i krajnjim znakom. Sve radi savršeno kao desktop aplikacija ali kao servis ne. :o(((

[Ovu poruku je menjao salaczr dana 12.06.2009. u 17:04 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Windows Service Delphi712.06.2009. u 16:04 - pre 180 meseci
Cekaj, zasto:
ComPort.Open := True;
... stalno otvaras port u petlji, kad si ga vec jednom otvorio ?

Nisam citao sve odgovore u ovoj temi, ali otvaranje treba da u nekom drugom Eventu, tipa OnStart, konstruktoru i sl.




 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.static.isp.telekom.rs.



+5 Profil

icon Re: Windows Service Delphi712.06.2009. u 16:22 - pre 180 meseci
Servis se sastoji od dve Turbo Power komponente (ApdComPort i ApdDataPacket) i dbExpress konekcije na Firebird bazu. Kada se servis startuje (na event OnCreate) iz ini fajla pokupim podatke koji mi podese konekciju za com port i bazu (to za sad radi bez problema). Servis bi trebao da bude aktiviran po pokretanju sistema (instaliran <path>\program.exe /install) i da radi do god radi i operativni sistem. Medjutim program radi kao desktop aplikacija bez problema ali kao servis po pokretanju se odmah i ugasi. Inače program bi trebao da osluškuje podatke sa com porta (ApdComPort) i u slučaju da stignu odredjeni podaci (sa odredjenim početnim i krajnjim stringom) on odradi odredjeni posao (za to se brine ApdDataPacket komponenta). Tako da je glavni deo programa smešten u event DataPacket komponente OnStringPacket. Bitno mi je samo da servis pri pokretanju ostvari konekciju sa com portom i ostane aktivan, sve ostalo bi se dešavalo u zavisnosti šta stiže na com port.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Windows Service Delphi7

[ Pregleda: 2601 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

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