AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Wie erstelle ich einen Dienst für WinNT / Win2000 / Win XP
Tutorial durchsuchen
Ansicht
Themen-Optionen

Wie erstelle ich einen Dienst für WinNT / Win2000 / Win XP

Ein Tutorial von MaBuSE · begonnen am 28. Dez 2005 · letzter Beitrag vom 21. Okt 2013
Antwort Antwort
Seite 3 von 4     123 4      
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 25. Apr 2008, 07:58
Ich fand das Tut auch ganz ok.
Was mir fehlte war ein Herunterladbares Beispielprojekt.

Ich habe es mir nun selbst so nachgestellt, um einen eigenen Service zu erstellen. Allerdings habe ich da noch ein kleines Problem. Ich habe mir auf das Formular der Unit1 eine TServerSocket gelegt, weil ich im Hintergrund eine solche permanente interne Verbindung zwischen verschiedenen lokalen Applikationen benötige und nicht will, dass der User eventuell vergisst die entsprechende Applikation zu starten. Der Service lässt sich kompilieren und auch installieren, aber ich kann mich mit keiner TClientSocket auf den Server verbinden. Woran kann das liegen?

Ich habe die gleichen Einstellungen der Server-Komponente mal in einer einfach Beispiel-Applikation nachgestellt. Da ist es mir durchaus möglich mich zu verbinden. Was ist hier das Problem? Muss ich Zusatzeinstellungen vornehmen? Denn soweit ich weiss, ist es durchaus möglich einen Service auch als Server laufen zu lassen.
Danke
Tom
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 20. Jun 2008, 13:31
Ich weiss nicht, aber in Zeiten von Vista kommt mir mein Tutorial von damals ziemlich ... veraltet ... vor
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 16. Sep 2008, 23:13
Zitat von SirThornberry:
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
Die Frage nach den SERVICE_CONFIG_DESCRIPTION wurde schonmal gestellt, aber leider nicht beantwortet. Wäre es möglich, das auch für mich nochmal zu tun.

Im Übrigen würde auch ich mich über ein Beispielscode insbesondere unter Einbeziehung eines TTimer sehr freuen.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von kersm
kersm

Registriert seit: 18. Mai 2006
Ort: Austria
10 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 20. Feb 2009, 20:46
Hallo,

hab ein problem, versuche nach dem tut einen dienst für Vista mit TurboDelphi zu erstellen.

habe allerdings probleme damit, installieren funkt einwandfrei aber beim starten bekomme ich immer "Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung."
Die message boxes, oncreate und afterinstall werden einwandfrei angezeigt...

mein code:
Delphi-Quellcode:
  
implementation

{$R *.DFM}

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

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

procedure TService2.ServiceAfterInstall(Sender: TService);
begin
  ShowMessage('AfterInstall');
end;

procedure TService2.ServiceAfterUninstall(Sender: TService);
begin
  ShowMessage('AfterUnistall');
end;

procedure TService2.ServiceCreate(Sender: TObject);
begin
  ShowMessage('OnCreate');
end;

procedure TService2.ServiceExecute(Sender: TService);
begin
  ShowMessage('OnExecute - begin');
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(False);
  end;
  ShowMessage('OnExecute - end');
end;

procedure TService2.ServiceStart(Sender: TService; var Started: Boolean);
begin
  ShowMessage('OnStart');
  Started := true;
end;

procedure TService2.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  ShowMessage('OnStop');
  Stopped := true;
end;

end.
bin für jede hilfe dankbar!

lg martin
  Mit Zitat antworten Zitat
Benutzerbild von kersm
kersm

Registriert seit: 18. Mai 2006
Ort: Austria
10 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 22. Feb 2009, 08:29
Hallo zusammen,

weis niemnad etwas darüber?
Habe mittlerweile versucht den oben geposteten dienst unter winxp laufen zu lassen, mit dem gleichen resultat wie in vista..
lg martin
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 22. Feb 2009, 09:53
Was meint Google?
[google]Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.[/google]
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von kersm
kersm

Registriert seit: 18. Mai 2006
Ort: Austria
10 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 27. Feb 2009, 00:06
Danke, aber Google hatte ich vorher schon ohne Erfolg bemüht...

Aber ich hab das Problem mitllerweile durch Herumprobieren gefunden:
Wenn ich alle ShowMessage entferne und durch LogFile schreiben ersetze funzt es plötzlich auf XP und VISTA...

Enfernen der Messages hatte ich sowieso vor aber, weils halt als einfaches BSP so gepostet war hatte ichs vergeblich so probiert...
lg martin
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 27. Feb 2009, 07:22
Zitat von kersm:
Aber ich hab das Problem mitllerweile durch Herumprobieren gefunden:
Wenn ich alle ShowMessage entferne und durch LogFile schreiben ersetze funzt es plötzlich auf XP und VISTA...
Hallo,
Evtl hängt das damit zusammen:
[equote="MaBuSE schrieb in http://www.delphipraxis.net/internal...14ab97e#478354 "]
Zitat von Luckie:
Zitat von MaBuSE:
Mein Tipp:
Schreib dir mal einen Dienst, der in jedem Ereignis nur ein ShowMessage stehen hat.
Dazu muss es aber ein interaktiver Dienst sein, sonst sieht man nichts.
Das steht auch im Tutorial:

Zitat von MaBuSE:
...
In den Eigenschaften gibt es
  • DisplayName - Das ist der Name des Dienstes, der in der Diensteverwaltung angezeigt wird.
  • Interactive - sollte True sein und bedeutet, das der Dienst auch mit dem Benutzer interagieren darf
    (z.B. Dialogfenster, Icon in der Taskleiste (TNA), ...)
...
Das sollte auf True sein bezieht sich auf den ISDN Monitor für diesen der Beitrag geschrieben wurde.

Ansonsten hat Luckie Recht [/equote]

Solange der Dialog erscheint, und nicht OK gedrückt wird, steht der Dienst.
Das würde den Timeout erklären.

Dumm nur wenn der Dialog nicht angezeigt wird, weil nicht interaktiv.

Ist aber nur eine Vermutung. Ich habe mich bisher noch nicht mit Vista beschäftigt.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von kersm
kersm

Registriert seit: 18. Mai 2006
Ort: Austria
10 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win

  Alt 27. Feb 2009, 08:32
Zitat von MaBuSE:

Solange der Dialog erscheint, und nicht OK gedrückt wird, steht der Dienst.
Das würde den Timeout erklären.

Dumm nur wenn der Dialog nicht angezeigt wird, weil nicht interaktiv.

Ist aber nur eine Vermutung. Ich habe mich bisher noch nicht mit Vista beschäftigt.
Das Interactive Property war ihm ziemlich egal er hat die Messages von OnStart, OnExecute, OnStop weder im Vista noch im WinXP angezeigt.
Jedoch hat er beim install/uninstall jene von OnCreate, AfterInstall usw. angezeigt, deswegen hatte ich anfangs geglaubt das kann es nicht sein -> aber da wahr ich auf dem falschen Weg.
Der Grund wird wohl sein weil man ja beim install/uninstall die EXE 'normal' ausführt...
lg martin
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Wie erstelle ich einen Dienst für WinNT / Win2000 / Win XP

  Alt 21. Okt 2013, 18:04
hi , ich hab mal zum testen einen dienst geschrieben und den in nem virtuellen win7 x64 installiert. jedoch lässt sich der dienst einfach nicht starten ...
was mach ich da falsch???

interactive ist auf true
bilder sind in der rar


so hab ich den dienst registriert:
Delphi-Quellcode:
function ServiceRegister(szMachine, szServiceFile, szServiceName,
  szDisplayName: pchar): Boolean;
var
  h_manager, h_svc: SC_Handle;
begin
  Result := false;
  h_manager := OpenSCManager(szMachine, nil, SC_MANAGER_ALL_ACCESS);
  if h_manager > 0 then begin

    h_svc := CreateService(h_manager,
      szServiceName,
      szDisplayName,
      SERVICE_START or SERVICE_QUERY_STATUS or _DELETE,
      SERVICE_WIN32_OWN_PROCESS, // or SERVICE_INTERACTIVE_PROCESS,
      SERVICE_AUTO_START,
      SERVICE_ERROR_NORMAL,
      szServiceFile,
      nil, nil, nil, nil, nil);

    if h_svc > 0 then begin
      result := true;
      CloseServiceHandle(h_svc);
    end;

    CloseServiceHandle(h_manager);
  end;
end;
ServiceRegister(pchar(edit2.text),pchar(edit3.Text),pchar(edit1.text),pchar(edit4.text)); und so den dienst geschrieben:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TService1 = class(TService)
   procedure ServiceExecute(Sender: TService);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
  private
    { Private-Deklarationen }
  public
   function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;

var
  Service1: TService1;

implementation
{$R *.DFM}

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

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

procedure TService1.ServiceExecute(Sender: TService);
begin
// ShowMessage('OnExecute - begin');
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(False);
  end;
// ShowMessage('OnExecute - end');
end;


procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
   Started := True;
end;

end.
Angehängte Dateien
Dateityp: rar bilder.rar (261,1 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 22:50 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