AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Service Startet nicht

Ein Thema von Trafel21 · begonnen am 9. Jul 2019 · letzter Beitrag vom 9. Jul 2019
Antwort Antwort
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#1

Windows Service Startet nicht

  Alt 9. Jul 2019, 09:41
Hallo zusammen,

ich hab ein kleines Problem das mein Service nicht starten möchte. Es kommt die Fehlermeldung "Einige Dienste werden automatisch angehalten, wenn sie nicht von anderen Diensten oder Programmen verwendet werden.".

Ich hab ein TDatenModul aus AsteriskDataModul welche über SIP eine Schnittstelle die Telefonanlage überwacht. Welche beim Windows Start über einen Windows Service gehandelt werden soll. Ich bin ein kompletter Neuling was das Thema angeht. Weiß jemand wie ich ein DataModule in einem Service handel?

Mein Code sieht momentan wie folgt aus:

Code:
unit MyService;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs, AsteriskDataModul;

type
  TTelephoneControl = class(TService)
    procedure ServiceAfterInstall(Sender: TService);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  private
    { Private-Deklarationen }
    AsteriskCallControlModule: Tbc_Asterisk_CallControl;
  public
    function GetServiceController: TServiceController; override;

    { Public-Deklarationen }
  end;

var
  TelephoneControl: TTelephoneControl; // ausAsteriskDataModul;

implementation

{$R *.dfm}

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

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

procedure TTelephoneControl.ServiceAfterInstall(Sender: TService);
begin
//
end;

procedure TTelephoneControl.ServiceExecute(Sender: TService);
begin
//
end;

procedure TTelephoneControl.ServiceStart(Sender: TService; var Started: Boolean);
begin
  if not(assigned(AsteriskCallControlModule)) then
  begin
    AsteriskCallControlModule := Tbc_Asterisk_CallControl.Create(nil);
  end;
  Started := True;
end;

procedure TTelephoneControl.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  FreeAndNil(AsteriskCallControlModule);
  Stopped := True;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Windows Service Startet nicht

  Alt 9. Jul 2019, 09:57
Dein Service tut ja auch nichts. Schreib mal ins ServiceExecute:
Delphi-Quellcode:
  while not Terminated do
    ServiceThread.ProcessRequests(True);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#3

AW: Windows Service Startet nicht

  Alt 9. Jul 2019, 11:01
Vielen Dank, funktioniert.

Ich hatte davor mittels TThread versucht ein Thread zu handeln.

Code:
unit MyService;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs,
  AsteriskDataModul, Eventlog;
type
  TWorkflowThread = class(TThread)
  protected
    procedure Execute; override;
    var AsteriskCallControlModule: Tbc_Asterisk_CallControl;
  end;

  TBalyTelephoneControl = class(TService)
    procedure ServiceAfterInstall(Sender: TService);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure ServiceShutdown(Sender: TService);
  private
    { Private-Deklarationen }
    fWorkflowThread: TWorkflowThread;
  public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;

var
  BalyTelephoneControl: TBalyTelephoneControl;

implementation

{$R *.dfm}

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

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

procedure TBalyTelephoneControl.ServiceAfterInstall(Sender: TService);
begin
  LogMessage('Afterinstall');
end;

procedure TBalyTelephoneControl.ServiceExecute(Sender: TService);
begin
  ServiceThread.ProcessRequests(true);
end;

procedure TBalyTelephoneControl.ServiceShutdown(Sender: TService);
begin
  if Assigned(fWorkflowThread) then
  begin
    fWorkflowThread.Terminate;
    while WaitForSingleObject(fWorkflowThread.Handle, WaitHint-100) = WAIT_TIMEOUT do
      ReportStatus;
    FreeAndNil(fWorkflowThread);
  end;
end;

procedure TBalyTelephoneControl.ServiceStart(Sender: TService; var Started: Boolean);
begin
  Eventlog.EventLog_Success('Service Start','Service Start','');
  fWorkflowThread := TWorkflowThread.Create(False);
  Started := True;
end;

procedure TBalyTelephoneControl.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  Eventlog.EventLog_Success('Service Stop','Service Stop','');
  ServiceShutdown(Sender);
  Stopped := True;
end;

{ TWorkflowThread }

procedure TWorkflowThread.Execute;
begin
  inherited;
  try
    if not(assigned(AsteriskCallControlModule)) then
    begin
      AsteriskCallControlModule := Tbc_Asterisk_CallControl.Create(nil);
    end;
    while not Terminated do
    begin
      Sleep(500);
    end;
      FreeAndNil(AsteriskCallControlModule);
  except
    on e: Exception do Eventlog.EventLog_Error('Error',e.Message,'')
  end;
end;


end.
Muss ich nicht im ServiceThread mein Datamodul irgendwie einbinden?

Geändert von Trafel21 ( 9. Jul 2019 um 11:04 Uhr)
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
69 Beiträge
 
#4

AW: Windows Service Startet nicht

  Alt 9. Jul 2019, 13:20
Der Service funktioniert auf jedenfall und erfüllt seinen soll. Nochmal Danke für die Hilfe. ^^ Thread kann geschlossen werden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 Uhr.
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