Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Dienst, Service oder was? (D 2009 Prof)

  Alt 13. Jun 2010, 12:50
Ich komme noch nicht klar damit und finde auch im Netz sehr Widersprüchliches
Vielleicht können wir das ja mal hier Stück für Stück nachvollziehbar aufarbeiten:

Delphi-Quellcode:
unit sju;

interface

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

type
  TServiceJu = class(TService)
    Timer1: TTimer;
    procedure ServiceExecute(Sender: TService);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;

var
  ServiceJu: TServiceJu;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  ServiceJu.Controller(CtrlCode);
end;

function TServiceJu.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TServiceJu.ServiceExecute(Sender: TService);
begin
  Timer1.Enabled := True;
  while not Terminated do
    ServiceThread.ProcessRequests(False); // or True
  Timer1.Enabled := False;
end;

procedure TServiceJu.Timer1Timer(Sender: TObject);
begin
  Beep;
end;

end.
Wenn ich den Dienst in der Dos-Box mit "ju /install" installiere, erhalte ich eine MessageBox "Service erfolgreich installiert". Jede Sekunde beept der Service erwartungsgemäß.
Wenn ich die Meldung schließe, beept nix mehr.
Der Dienst läuft (wie man in der Systemüberwachung sieht) nach der Installation nicht automatisch. Wenn ich ihn starte, ist keine Reaktion ersichtlich (es beept nichts).
Wenn ich den Dienst mit "ju /uninstall" deinstalliere, erhalte ich eine MessageBox "Service erfolgreich deinstalliert". Jede Sekunde beept der Service wieder.
Wenn ich die Meldung schließe, beept nix mehr.

Ersetze ich das False im "ServiceThread.ProcessRequests(False);" durch True sind keine Änderungen zu bemerken.

Der Service ist auf "interactiv" gesetzt

Wenn ich den Timer entferne und ServiceExecute ändere in
Delphi-Quellcode:
while not Terminated do
begin
  ServiceThread.ProcessRequests(False);
  Beep;
  Sleep(500);
end;
erhalte ich zu keinem Zeitpunkt einen Beep.

Was mache ich falsch?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat