26. oktober 2004 - 21:52Der er
10 kommentarer og 2 løsninger
Service lukker
Jeg har lavet en service-app som jeg så installere... (service.exe /install) Så kommer der en box hvor der står at servicen er installeret, hvilket også er godt nok. Men servicen kører kun indtil jeg trykker OK i denne box... Og når jeg starter den lukker den med det samme...
Hvordan kan jeg få en service til at blive ved med at køre når jeg starter den?
Jeg ved ikke præcis hvad du har gjort galt .. Men start med at konvetere din service tilbage til en almindelig EXE fil, GLEM ALT OM SERVICE til at starte med, så har jeg noget kode som nemt kan hacke en EXEfil om til en service.
Men start med det første og skriv tilbage når du er klar !
- tolderlund Da jeg er ved at finde ud af at lave en service er der som ikke mere i koden end at en timer laver en messageBox efter X antal sekunder. Bare for at have noget at gå ud fra :) Så der burde ikke være nogle fejl! Men det kunne jo godt være at man skulle skrive noget specielt for at service ikke "døde" selv...
-Jens B Okay hvad skal jeg gøre for at Hacke en EXEfil?
type TmyService01 = class(TService) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure ServiceCreate(Sender: TObject); private { Private declarations } public function GetServiceController: TServiceController; override; { Public declarations } end;
var myService01: TmyService01;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall; begin myService01.Controller(CtrlCode); end;
function TmyService01.GetServiceController: TServiceController; begin Result := ServiceController; end;
procedure TmyService01.Timer1Timer(Sender: TObject); begin showMessage('Hello World!'); end;
procedure TmyService01.ServiceCreate(Sender: TObject); begin Timer1.Enabled := true; end;
End.
--------------
Jeg kan godt få servicen til at kører når koden ser sådan ud men intet virker! timeren bliver ikke enabled og lige meget hvad event jeg skriver enten Timer1.Enabled := true; eller showMessage('Hello World!'); sker der een af 3 ting. 1.: Servicen lukker med det samme 2.: Servicen kører men intet sker 3.: Servicen crasher og kan ikke stoppes med mindre man genstarter... :)
Jo det virker faktisk ganske fortræffeligt :) Hvad er grunden til jeg ikke kan bruge et timer? Jeg kan måske ikke bruge andre events en servicens engne i en service?
Årsagen er den måde en timer fungerer på. Når en timer (der er en Windows ting) trigges sender Windows en WM_TIMER message til den timertrådens message kø. Dette kræver naturligvis at der er en message kø og et message loop til at processe messages. En service har ingen af delene og derfor kan en timer ikke virke. Man kan dog indbygge disse ting selv (hvis man er masochist) men det er bøvlet og ikke besværet værd, når der er andre og simplere måder at gøre det på.
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.