Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Service debuggen (https://www.delphipraxis.net/50156-service-debuggen.html)

Olli 21. Jul 2005 21:48

Re: Service debuggen
 
Zitat:

Zitat von EagleData
Mist. Bin ich fast der einzige der mal nen Service programmiert?

Nein, bist du sicher nicht. Aber wie gesagt, ohne nähere Infos zu deiner verwendeten Klasse kannst du von mir nichts weiter verlangen :|

EagleData 21. Jul 2005 21:57

Re: Service debuggen
 
was brauchst du denn noch? ich hab doch den gesamten Quelltext gepostet (1. Seite).

Olli 21. Jul 2005 22:13

Re: Service debuggen
 
Zitat:

Zitat von EagleData
was brauchst du denn noch? ich hab doch den gesamten Quelltext gepostet (1. Seite).

Habe ich doch geschrieben: mindestens die Klassendeklaration, wenn schon nicht die komplette Unit. Die Unit solltest du aber nicht hier posten, weil das Probleme mit Borland geben könnte. Also lieber per PN schicken. Wird dann aber frühestens morgen bei mir.

EagleData 22. Jul 2005 07:16

Re: Service debuggen
 
welche Unit meinst du denn? Ich hab den kompletten Quelltext der Unit von meinem Service doch schon gepostet.

Flocke 22. Jul 2005 08:43

Re: Service debuggen
 
@Olli: Die Unit SvcMgr ist von Borland!

Zum Prinzip:

Delphi geht davon aus, dass der Thread so lange läuft, bis der Dienst angehalten/beendet wird.

Also solltest du keinen Timer verwenden sondern einfach eine Endlosschleife, in der du mit Sleep oder WaitForSinlgeObject/WaitForMultipleObjects auf das nächste Ereignis wartest.

[jetzt muss ich erst noch ein bisschen lesen...]

Also: du packst einfach alles in OnExecute, in der Art:
Delphi-Quellcode:
procedure TService2.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  try
    AssignFile(txt_logfile, 'sensor.log');
    Append(txt_logfile);
    DateSeparator:='/';
    Writeln(txt_logfile, FormatDateTime('yyyy/mm/dd hh:nn:ss',Now));
    Flush(txt_logfile);
    CloseFile(txt_logfile);

    Sleep(1000);
    ServiceThread.ProcessRequests(False);
  except
  end;
end;

Olli 22. Jul 2005 09:00

Re: Service debuggen
 
Zitat:

Zitat von Flocke
@Olli: Die Unit SvcMgr ist von Borland!

Weiß ich. Bringt mir nur nix, wenn ich sie nicht habe um zu helfen.

Zitat:

Zitat von Flocke
DelphiWindows geht davon aus, dass der Thread so lange läuft, bis der Dienst angehalten/beendet wird.

:zwinker:

Zitat:

Zitat von Flocke
Also: du packst einfach alles in OnExecute, in der Art:

Siehste, und genau diese Information hat mir gefehlt. Deswegen habe ich oben Rätselraten müssen.

Flocke 22. Jul 2005 09:13

Re: Service debuggen
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Flocke
DelphiWindows geht davon aus, dass der Thread so lange läuft, bis der Dienst angehalten/beendet wird.

:zwinker:

Das meinte ich nicht!

Was ich eigentlich meinte ist: Delphi geht davon aus, dass du den (speziell dafür erstellten) TServiceThread in OnExecute so lange beschäftigst, bis der Dienst angehalten/beendet wird (Property Terminated).

s14 22. Jul 2005 09:21

Re: Service debuggen
 
Ich weiß nicht ob es hilft, mir ist aber noch dunkel in Erinnerung, dass Delphi5 Probleme mit Diensten hat.
Probier mal folgendes in der Projektdatei:

Delphi-Quellcode:
procedure BreakProcessSecurity; // (;-P)
var SD: PSECURITY_DESCRIPTOR;
begin
    GetMem(SD,SECURITY_DESCRIPTOR_MIN_LENGTH);
    if not InitializeSecurityDescriptor(SD,SECURITY_DESCRIPTOR_REVISION) then RaiseLastWin32Error;
    if not SetKernelObjectSecurity(GetCurrentProcess,DACL_SECURITY_INFORMATION,SD) then RaiseLastWin32Error;
    FreeMem(SD);
end;

begin
    BreakProcessSecurity;
    Application.Initialize;
    ............
Die Units Windows und SysUtils müssen noch in die Uses - Klausel.

Der Tipp ist noch aus dem Jahr 2000 :???:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz