23. februar 2003 - 18:33Der er
14 kommentarer og 2 løsninger
Service...
Hej, er der nogen der kan hjælpe mig med at lave en service i delphi ? Jeg har Delphi Enterprise og Windows 2000 Professional. Jeg vil gerne have sourcekode til at starte og stoppe en service fra et normalt program, Og hvordan man laver dette som en service :
procedure TForm1.FormCreate(Sender: TObject); begin Start_K8000; SelectI2CprinterPort(2); card_nr:=0; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin timer1.enabled:=false; Stop_K8000; mysqlquery2.SQL.Clear; mysqlquery2.SQL.Add('update server set startet = 0'); mysqlquery2.Active := true; mysqlquery2.Active := false; end;
procedure TForm1.Timer1Timer(Sender: TObject); var i : integer; begin mysqlquery1.refresh; for i:=1 to 16 do begin if mysqlquery1.Fields[i-1].value = 1 then begin if not readiochannel(i) then begin ConfigIOchannelAsOutput(i); SetIOchannel(i); end; end else begin if readiochannel(i) then begin ConfigIOchannelAsOutput(i); ClearIOchannel(i); end; end; end; end;
procedure TForm1.mySQLQuery1AfterOpen(DataSet: TDataSet); begin if not timer1.Enabled then begin Timer1.Enabled := True; mysqlquery2.Active := true; mysqlquery2.Active := false; end; end;
File-New-Other-Service Application Når du har lavet din service/application skal du selv installere din service manuelt i en dosprompt regsvr32 c:\min_service.dll -install eller lad dit install program gøre det.
var Service1: TService1; n, card_nr:integer; dac_ch: array[1..9] of boolean; var IOconfig: ARRAY[0..MaxIOchip] OF Integer; IOdata: ARRAY[0..MaxIOchip] OF Integer; DAC: ARRAY[1..MaxDACchannel] OF Integer; DA: ARRAY[1..MaxDAchannel] OF Integer;
procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); end;
function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end;
procedure TService1.Timer1Timer(Sender: TObject); var i : integer; begin mysqlquery1.refresh; for i:=1 to 16 do begin if mysqlquery1.Fields[i-1].value = 1 then begin if not readiochannel(i) then begin ConfigIOchannelAsOutput(i); SetIOchannel(i); end; end else begin if readiochannel(i) then begin ConfigIOchannelAsOutput(i); ClearIOchannel(i); end; end; end; end;
procedure TService1.mySQLQuery1AfterOpen(DataSet: TDataSet); begin if not timer1.Enabled then begin Timer1.Enabled := True; mysqlquery2.Active := true; mysqlquery2.Active := false; end; end;
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean); begin Start_K8000; SelectI2CprinterPort(2); card_nr:=0; end;
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean); begin timer1.enabled:=false; Stop_K8000; mysqlquery2.SQL.Clear; mysqlquery2.SQL.Add('update server set startet = 0'); mysqlquery2.Active := true; mysqlquery2.Active := false; end;
procedure TService1.ServiceExecute(Sender: TService); begin Start_K8000; SelectI2CprinterPort(2); card_nr:=0; end;
JA, du du skal sætte en property på din servce hvis du skal ha' mulighed for at lave GUI fra den, jeg kan ikke lige huske hvad den hedder, så den venter sikker på et ok, som du ikke kan se
Ok, nu har jeg sat Interactive til True, men det virker stadigt ikke... Jeg får nu den dialogboks hvor jeg skal trykke ok, men servicen kan stadig ikke startes. Servicen bruger en dll, kan det være der problemmet ligger? Dll'en ligger i samme mappe som servicens exe fil...
Det virker stadigt ikke, selvom jeg udkommenterer alt der har med mysql at gøre. Når jeg prøver at starte servicen fra dens exe fil, får jeg "Runtime error 217 at 00008140", hvad betyder det?
Undskyld, nu har jeg rettet fejlen med runtime error, men det virker stadigt ikke... Er der nogen bud på hvad der så kan være galt? Er der nogen der gider at lave en simpel service som virker i delphi 6.0 og sende den til mig (thomas@thulesen.dk)?
Mange tak for hjælpen..! Nu virker det, jeg brugte dog ikke dit ex. martinlind. Jeg begyndte forfra og tog en ting ad gangen, og så virkede det selvfølgelig... Jeg prøver at dele pointsne lige, jeg tager halvdelen selv, da jeg ikke fik noget brugeligt svar, men mange tak for svarene alligevel...
Synes godt om
Ny brugerNybegynder
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.