Avatar billede refpsych Nybegynder
26. oktober 2004 - 21:52 Der 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?
Avatar billede borrisholt Novice
27. oktober 2004 - 08:10 #1
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 !

Jens B
Avatar billede tolderlund Nybegynder
27. oktober 2004 - 09:01 #2
Det er umuligt at sige hvad fjlen er uden at se din kode.
Avatar billede refpsych Nybegynder
27. oktober 2004 - 21:35 #3
- 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?
Avatar billede tolderlund Nybegynder
28. oktober 2004 - 10:25 #4
refpsych, selvfølgelig kan der være fejl i en så simpel service.
Det beviser dit besvær jo tydeligt.
Lad os se din kode!
Avatar billede refpsych Nybegynder
29. oktober 2004 - 14:35 #5
- tolderlund
Hehe her er koden:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ExtCtrls;

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... :)
Avatar billede refpsych Nybegynder
29. oktober 2004 - 14:40 #6
-borrisholt

Okay hvad skal jeg gøre for at Hacke en EXEfil?
Avatar billede tolderlund Nybegynder
29. oktober 2004 - 15:39 #7
Du skal da heller ikke bruge timer i en service!
Fjern det!
Du skal i stedet for servicens OnStart og OnExecute events.
Avatar billede refpsych Nybegynder
30. oktober 2004 - 14:13 #8
Okay...Men hvordan kan jeg så få servicen til at gøre noget med et vist interval hvis ikke jeg kan bruge en timer?
Avatar billede tolderlund Nybegynder
01. november 2004 - 09:17 #9
Nu kender jeg ikke dit præcise behov, men et lille loop med brug af Sleep kan måske gøre det.
Avatar billede refpsych Nybegynder
01. november 2004 - 17:01 #10
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?
Avatar billede tolderlund Nybegynder
02. november 2004 - 09:16 #11
Å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å.
Avatar billede refpsych Nybegynder
02. november 2004 - 16:49 #12
Okay :) Takker for alt hjælpen...
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