Avatar billede delphi Nybegynder
27. januar 2000 - 14:42 Der er 9 kommentarer og
1 løsning

Service Applications

Jeg tror at jeg vil følge dj's spor og kaste nogle point i grams...

Jeg har behov for at lave en dataopsamlings application, der skal kører 24/7 på en NT-server.  For at undgå, at man skal logge på serveren mv. før programmet, så har jeg tænkt mig at køre programmet som en service application.

Jeg har leget lidt (et par timer) med ideen og fået lavet min første application, men er umiddelbart løbet ind i det problem, at jeg ikke kan starte min service fra Control Panel - services appletten.  Når jeg prøver sker der intet i et par minutter, hvorefter en fejlmelding popper op.

Er der nogle af jer andre, der har erfaringer med at lave den slags opgaver?  Hvor er der noget dokumentation?

Det skal compiles med Delphi 5/pro.

NiP
Avatar billede sjensen Nybegynder
27. januar 2000 - 15:26 #1
Delphi,

Jeg har lavet en service (D4) der kører udmærket, og som undersøger en disk for indkomne filer (ftp) fra en Siemens mainframe. For hver fil der findes, behandles data i den og nogle koder udskiftes med nogle tekster fra et par acsii-filer og behandlingen afsluttes med at servicen starter Word97 hvor en autoexec() macro overtager dataene, fletter dem med et (ud af +200) templatedokumenter, udskriver det færdige dokument på brugerens printer og afslutter word.

Servicen kører på en server, hvor også word er installeret, teksterne (asciifilerne) er og som bruger de pågældende brugeres uddelte printere.

Servicen benytter sig af en række indstillinger den læser fra serverens registry (stier, tempfilnavne, søgeintervaller m.m.) og heriblandt info om hvordan servicen skal startes: som system eller som en bruger.

Som supplement til servicen har jeg et service kontrol program, der kan starte/stoppe servicen og som samtidig bruges til at rette de registry settings servicen er afhængig af.

Den dokumentation jeg har brugt er alene delphi hjælpetekst, og i særdeleshed win32.hlp (+11mb) der følger med Delphi.

Herudover downloadede jeg et servicekontrol eksempel fra DSP.

Hvis du er interesseret vil jeg gerne maile dig sourcen til systemerne.

Bemærk: Der er et par detaljer der er vigtige for at få servicen til at køre:

Sørg for at der under policies for maskinen er angivet tilladelse for den bruger servicen benytter til at a. logge på locally og isæt b. logge på som en serice.

sjensen
Avatar billede hlj Nybegynder
27. januar 2000 - 19:48 #2
sjensen> Jeg kunne godt tænke mig at få en kopi tilsendt. Det lyder spændende at kunne lave service under NT.

Jeg havde engentlig altid troet at det var lige som device drivers og kunne kun laves i C.
Avatar billede sjensen Nybegynder
27. januar 2000 - 22:22 #3
hlj,

Nej nej, der er såmændt let nok i Delphi. Dog skal du have D4 eller D5.

Åben Delphi og vælg New. Fra de muligheder der fremkommer kan du vælge "Service". Dette giver dig et skabelon program som du kan udfylde som du plejer med et delphiprogram. Blot skal du huske på at du ikke har en canvas (d.v.s. form) at se på mens programmet (servicen) kører og derfor skal du programmere det helt uden bruger-indflydelse.

Indflydelsen kan du komme i kontrolprogrammet hvor du, som jeg nævnte ovenstående, kan hhv. starte og stoppe servicen (på samme måde som i kontrol panel, services) og f.eks. ændre på nogle af de parametre/data servicen er afhængig af.

En af de ting man skal være opmærksom på ved services er tidsfaktoren. Services er pr. natur et program der kører hele tiden og derfor er det opbygget med nogle procedurer / funktioner der automatisk aktiveres. Man skal derfor sørge for at de operationer man laver ikke er for langvarige. For at undgå dette kan man ændre betingelserne til at være afhængig af en timer, og det jeg gør er at disable timeren for hver operation jeg udfører. Ved afslutningne af en operation enabler jeg timeren igen og ved næste "tick" starter jeg operationen igen.

Enkelt nok, når man lige har fundet fidusen.

En af de ting jeg i øvrigt glemte at fortælle i mit første svar er at min service også opdaterer eventloggen i forskellige situationer. Og det er et kapitel for sig. Events der skrives til loggen skal "merges" med foruddefinerede meddelelser (på det lands sprog maskinen er sat op til) og man opretter en entry i loggen ved at henvise til denne meddelelse samt overføre tekster/numre som parametre, således at eventens tekst fremstår forståelig for den pågældende bruger. Problemet her er at få oprettet de forbandede meddelelser og gud hjælpe mig om ikke man skal bruge et specielt system fra MS til dette formål. En "Message Compiler" hedder det og det er det eneste jeg ikke har fået på plads. Så mine events viser ganske fint mine meddelelser, men altså lige med en enkelt linie tilføjet der fortæller at "message no xx" no found !" eller noget i den stil. Pis... irriterende.

Men ok, det virker da efter hensigten og servicen kører fint nok.

hjl>Hvis du giver mig en mail-id sender jeg dig en zippet fil med herlighederne.

Hilsen
sjensen
Avatar billede hlj Nybegynder
28. januar 2000 - 09:18 #4
sjensen> Jeg må indrømme at efter jeg har fundet Eksperten, for ca 2 måneder siden, har jeg fået meget mere konkret og oplysende informationer end hvad der tidligere har været muligt.

At du/I gider at skrive lange velformulerede forklaringer er beundringsværdig.

Jeg vil prøve at se om jeg selv kan opnå samme standard.

Det med Event Log indlæg har jeg også tænkt på hvordan man gjorde, men har endnu ikke haft tid til at se på. Så det bliver spændende at se din kode.

Min e-mail addresse er: hlj@image.dk

På forhånd tak.
Avatar billede delphi Nybegynder
28. januar 2000 - 09:52 #5
Hejsa SJensen:

De ting du beskriver er faktisk også de ting jeg selv havde fundet ud af eller læst mig til.  Jeg har også fundet ud af, at Win32 hjælpen (som er omkring 24MByte, ikke 11) er den enste reelle kilde der følger med Delphi vedr. Services og Service Applications. 

Jeg har lavet et par test applications - noget med at benytte en timer til regelmæssigt at checkker for eksistensen af et par filer og primitiv brugerkommunikere via en dialogbox - jo det er muligt - brug fx. MessageBox rutinen.

MessageBox eksempel (bemærk brugen af flaget 'MB_SERVICE_NOTIFICATION'):


if MessageBox( 0, 'Kill Service?', 'Hello World Service', MB_OKCANCEL + MB_ICONQUESTION + MB_SERVICE_NOTIFICATION ) = IDOK then
  ServiceThread.Terminate;

Dette eksempel vil terminere en kørende service, hvis der trykkes Ok.

Mine problemer ligger i at "Control Panel -> Services" ikke vil starte/stoppe min service korrekt, dvs. uden fejl meldinger.

Event logs lagde jeg mærke til i forbifarten, men jeg har valgt at lade min 'logs' benytte en textfil.

Delphi 4/5 CS har nogle Service-Application wizards.  Et eller andet smart hoved hos Borland har dog besluttet, at selv om Pro udgaverne har samme muligheder som CS udgaverne for at lave Services, så skal disse Wizards ikke være includeret i pro udgaverne - drønt smart!  Der ligger dog wizards til download på nettet - Søg dem selv med: '+Delphi +"Service Application"' eller giv mig et pip og jeg kan sende dem.

På http://www.fulgan.com/delphi/ er der en smule at hente, bl.a. også ang. Delphi i samarbejde med MS-IIS vedr. ASP/ISAPI.

Jeg vil gerne se din kode - specielt vil din kontrol application sikkert være spændende.  Jeg har ikke specielt interesse i at se hvad din program egentligt laver.  Sagt på en anden måde: Jeg gider ikke studere en masse kode, når det er skelettet/metoderne/strukturen bag service applicationen der har min interesse.

NiP


PS: Hvor hoder du egentligt til i landet og hvad laver du.  Din ekspert profil har du ikke udfyldt.

PPS: Hvor er det dog et råddent lille input felt der er her på Eksperten.  Bruger i andre også Notepad istedet?
Avatar billede sjensen Nybegynder
30. januar 2000 - 00:46 #6
Hej Gutter,

Det er ikke for at være uhøflig at jeg ikke har svaret, men jeg kan ikke rigtigt gøre noget før Mandag, da jeg har det hele inde på arbejde, og jeg var så heldig at have fri Fredag.

Så, I hører fra mig igen Mandag.

sjensen
Avatar billede sjensen Nybegynder
31. januar 2000 - 11:27 #7
Se i jeres indbakke gutter,

Der er mail !
Avatar billede delphi Nybegynder
02. februar 2000 - 14:09 #8
Jeg har modtaget din mail, men har ikke tid til at kigge på sagerne før engang i næste uge (og ugen efter har jeg ferie, såeh...)

NiP
Avatar billede sjensen Nybegynder
02. februar 2000 - 14:39 #9
ja, ja det går nok. Det vigtigste er at du får løst dit problem med servicen og du er velkommen til at sende mig en mail direkte med spm. hvis du har brug for det.

hilsen
sjensen
Avatar billede delphi Nybegynder
07. februar 2000 - 10:22 #10
Jeg har desværre ikke lige tid til at kigge på sagerne, så det kommer til at ligge en 14 dages tid til jeg er færdig med at flytte osv.  Indtil da, så ryger der lige nogle point over disken...

NiP
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester