![]() |
Windows Service Startet nicht
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. |
AW: Windows Service Startet nicht
Dein Service tut ja auch nichts. Schreib mal ins ServiceExecute:
Delphi-Quellcode:
while not Terminated do
ServiceThread.ProcessRequests(True); |
AW: Windows Service Startet nicht
Vielen Dank, funktioniert. :)
Ich hatte davor mittels TThread versucht ein Thread zu handeln.
Code:
Muss ich nicht im ServiceThread mein Datamodul irgendwie einbinden?
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. |
AW: Windows Service Startet nicht
Der Service funktioniert auf jedenfall und erfüllt seinen soll. Nochmal Danke für die Hilfe. ^^ Thread kann geschlossen werden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz