| Autor |
Beitrag |
anubis2k5
      
Beiträge: 23
Windows 7
Delphi 2010
|
Verfasst: Sa 07.05.11 19:27
Hallo Leute
ich versuche derzeit einen simplen Windowsdienst zu entwickeln, leider scheidere ich schon bei der Vorlage von Delphi (2010).
Das kompilieren funktioniert ohne Probleme, auch das starten per xxx.exe /install funktioniert. Das Ereignis von ServiceCreate wird auch noch ausgeführt doch dann ist Ruhe...
Versuche ich den Dienst mittels: "net start test_srv.exe" zu starten, passiert gar nichts - bis auf die Fehlermeldung das der Dienst nicht reagiert (siehe Screenshot Konsole (jpg, 82.3 KB)).
Hier der Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| unit test_srv_unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type TService1 = class(TService) procedure ServiceCreate(Sender: TObject); procedure ServiceExecute(Sender: TService); procedure ServiceStart(Sender: TService; var Started: Boolean); private public function GetServiceController: TServiceController; override; end;
var Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); ShowMessage(IntToStr(CtrlCode)); end;
function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end;
procedure TService1.ServiceCreate(Sender: TObject); begin ShowMessage('Create'); end;
procedure TService1.ServiceExecute(Sender: TService); begin ShowMessage('Execute'); end;
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean); begin ShowMessage('Start'); end;
end. |
Einloggen, um Attachments anzusehen!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 07.05.11 20:44
Beschäftige dich mal mit den Grundlagen von Diensten. Wenn dein Dienst kein Interaktiverdienst ist, und die gibt es ab Vista nicht mehr, dürftest du keine Nachricht zu sehen bekommen, weil der Dienst in einer anderen Windowsstation auf einem anderen Desktop läuft und keinen Zugriff auf den Desktop des interaktiv angemeldeten Benutzers hat.
Für diesen Beitrag haben gedankt: anubis2k5
|
|
anubis2k5 
      
Beiträge: 23
Windows 7
Delphi 2010
|
Verfasst: Sa 07.05.11 20:49
Oh ha, das war mir wirklich neu... Danke dir Michael.
Kannst du mir schnell mit einem Link auf dein Tutorial zu den Diensten helfen?
Halt! Habe gerade mal mein Projekt überprüft, das Häkchen ist aber bei Interactive drin?!
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.05.11 21:18
anubis2k5 hat folgendes geschrieben : | | Halt! Habe gerade mal mein Projekt überprüft, das Häkchen ist aber bei Interactive drin?! |
Wie schon geschrieben:
Die gibt es ab Vista gar nicht mehr und waren vorher auch nur eine Notlösung, wenn man kein sauberes Konzept entwickeln wollte.
Benutze einfach das Eventlog, wenn du Logausgaben machen willst. Dafür ist es da. Und dafür gibt es schon fertige Klasse für den Zugriff in Delphi.
// EDIT:
Beispiel: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| const SERVER_DISCONNECT = 3331;
procedure TMyDataModule.WebModuleCreate(Sender: TObject); begin FEventLogger := TEventLogger.Create(ExtractFileName(ParamStr(0))); end;
procedure TMyDataModule.WebModuleDestroy(Sender: TObject); begin FreeAndNil(FEventLogger); end;
FEventLogger.LogMessage('Server stopped listening!', EVENTLOG_INFORMATION_TYPE, 1, SERVER_DISCONNECT); |
|
|
anubis2k5 
      
Beiträge: 23
Windows 7
Delphi 2010
|
Verfasst: So 08.05.11 09:36
Ich danke euch!
nach entfernen aller "ShowMessages" und der Unit Dialogs funktionierte der Dienst wie gewünscht.
Startet der Dienst eigentlich bei jedem Systemstart, wenn ich diesen einmalig mittels "net start dienst" aktiviert habe?
Grüße Thomas
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.05.11 11:57
In der Standardeinstellung steht der Dienst auf Starttyp automatisch. Das kannst du im Dienstmodul in Delphi einfach im Objektinspektor einstellen.
Deshalb musst du ihn nicht einmal manuell starten nach der Installation, ein Neustart des Rechners reicht auch.
Für diesen Beitrag haben gedankt: anubis2k5
|
|
anubis2k5 
      
Beiträge: 23
Windows 7
Delphi 2010
|
Verfasst: So 08.05.11 13:22
Eine kurze Frage noch - erläutere mir bitte kurz, wo ich die Klasse zum Eventlog finde - durch die Hilfe konnte ich nichts finden...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.05.11 13:49
Ist in der Service Klasse enthalten: SvcMgr. Aber das sollte man auch über die Hilfe herausfinden können.
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.05.11 13:57
Richtig, F1 auf TEventLogger führt mich direkt zu der entsprechenden Seite.
Abgesehen davon ist die Unit in einer Service-Anwendung ohnehin schon drin, sonst würde das ganze gar nicht funktionieren.  Und oben im geposteten Quelltext ist die ja auch schon drin. 
|
|
anubis2k5 
      
Beiträge: 23
Windows 7
Delphi 2010
|
Verfasst: So 08.05.11 18:34
Auch auf die Gefahr hin, dass ich mich jetzt blamiere, aber wenn ich TEventLogger in der Hilfe als Suche angebe, erhalte ich nichts - erst mit LogMessage stoße ich auf TEventLogger
Egal, danke trotzdem für eure Hilfe!
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.05.11 19:01
anubis2k5 hat folgendes geschrieben : | | Auch auf die Gefahr hin, dass ich mich jetzt blamiere, aber wenn ich TEventLogger in der Hilfe als Suche angebe, erhalte ich nichts |
Dann ist die Hilfe an der Stelle bei D2010 noch nicht vollständig.  Bei XE reicht es F1 zu drücken oder zu suchen.
Dann empfehle ich dir die Onlineausgabe der Hilfe:
docwiki.embarcadero.com/VCL/de/Hauptseite
Das ist die, die auch mit den aktuellen Delphiversionen dann mitgeliefert wird.
Dort findest du dann auch das Stichwort:
docwiki.embarcadero....CL%2Fde%2FHauptseite
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: anubis2k5
|
|