Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi wie installierten Dienst starten? (https://www.delphipraxis.net/32132-wie-installierten-dienst-starten.html)

Susanne 19. Okt 2004 11:09


wie installierten Dienst starten?
 
Hallo,

Ich möchte gerne einen Dienst entwickeln. Bis jetzt habe ich folgendes geschafft:
Das ist ein leerer Dienst und ich kann in installieren und deinstallieren, aber der Dienst wird nicht gestartet, wie stelle ich das an?


Delphi-Quellcode:
unit uMain;

interface

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

type
  TTimeManager = class(TService)
  private
    {Private-Deklarationen}
  public
    function GetServiceController: TServiceController; override;
    {Public-Deklarationen}
  end;

var
  TimeManager: TTimeManager;

implementation

{$R *.DFM}

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

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

end.
Vielen Dank schon mal für eure Hilfe.

Stevie 19. Okt 2004 11:13

Re: wie installierten Dienst starten?
 
Ich nehme an, du installierst ihn mit "uMain.exe /install". Danach einfach ein "net start <Dienstname>". Vor den Deinstallieren ein "net stop <Dienstname>" nicht vergessen!

Susanne 19. Okt 2004 12:02

Re: wie installierten Dienst starten?
 
irgendwie will das ganze sich jetzt auch nicht mehr installieren lassen

Fehlermeldung Service1 konnte nicht installiert werden, Systemfehler 1072, angegebener Dienst wurde zum löschen markiert

Was soll mir das ganze nun sagen. Gibt es irgendwo ein Tutorial, so von ganz von vorne.

Andere Frage dazu noch. Ich kann ja keine normale Anwendung als Dienst laufen lassen, muss ich die Funktionalität in der Service Anwendung ganz neu implementieren oder wie kann ich die Units in meine Service anwendung einfach reinnehmen? Oder wie mache ich das am Besten?

Stevie 19. Okt 2004 12:43

Re: wie installierten Dienst starten?
 
Vorsicht mit dem Installieren von Diensten, die du noch in Delphi entwickelst!
1. Niemals, einen Dienst aus der IDE heraus (mit den Parametern) (de)installieren!!
2. Zum Installieren die Exe woandershin kopieren, weil sie während der Laufzeit des Dienstes nicht verändert werden kann darf (Delphi kriegt es manchmal irgendwie hin das Teil neu zu kompilieren und stürzt ab!)
3. Immer die Reihenfolge beachten: Installieren, Starten, Stoppen, Deinstallieren

Die Vorgehensweise beim Umstellen einer "normalen" Anwendung auf einen Dienst hängt davon ab, was die Anwendung macht, die du umstellen willst.

Susanne 19. Okt 2004 12:55

Re: wie installierten Dienst starten?
 
ok, bisher liest die umzustellende Anwendung eine ini-Datei ein und anschliessend führt die Anwendung zu bestimmten Zeiten und an bestimmten Tagen bestimmte Programme aus, so ganz grob gesagt. Und im Form wird bisher dann auch angezeigt, was er gemacht hat.

Stevie 19. Okt 2004 13:09

Re: wie installierten Dienst starten?
 
Tja, das mit dem Form geht nicht, aber ich würd das dann als Log-Datei speichern.
Wenn du die Logik für die Zeitsteuerung in einem DataModul hast, dann kannst du das in deinem Dienst einbinden, ansonsten rauskopieren und im Dienst einfügen.

Susanne 19. Okt 2004 14:39

Re: wie installierten Dienst starten?
 
Bisher habe ich mit einem Form gearbeitet und da sind die Funktionen onActivate, oncanResize, Onclose, OnQueryClose und onCreate benutzt, das meiste davon würde bei dem Dienst ja wegfallen. Das was ich bei onClose habe müsste dann beim Dienst geschehen, wenn ich ihn beenden will. Also bevor er beendet wird und das von onCreate, wenn der Dienst gerade gestartet wurde? Ist das korrekt?

Einen Timer gibt es ja auch noch in dem Programm, wo müsste der bei dem Dienst implementiert werden?

Und wie kann ich es programmieren, dass wenn der Dienst installiert wurde er auch sofort danach gestartet wird. Bisher habe ich es ja nur mit net start ....exe gemacht, aber das muss doch auch irgendwie direkt im Dienst nach der Installation gehen. - nur wie?

Stevie 19. Okt 2004 15:00

Re: wie installierten Dienst starten?
 
- Richtig!
- Wenn du einen neuen Dienst erstellst hast du doch dieses Formular, da kannst du deinen Timer reinpacken...
- Das automatische Starten und Stoppen müsste so gehen:
Delphi-Quellcode:
procedure TService1.ServiceAfterInstall(Sender: TService);
begin
  DoStart;
end;

procedure TService1.ServiceBeforeUninstall(Sender: TService);
begin
  if not DoStop then
    raise Exception.Create('Dienst konnte nicht beendet werden!');
end;

Susanne 19. Okt 2004 15:24

Re: wie installierten Dienst starten?
 
Delphi-Quellcode:
procedure TService1.ServiceBeforeUninstall(Sender: TService);
begin
  DoStop;
end;

Hab ich eingebaut und ausprobiert, aber hier kommt die Meldung, er kann den Dienst nicht deinstallieren, Zugriffsverletzung an Adresse ..., Und das sTarten mit dostart funktioniert auch nicht, er installiert den dienst, startet ihn aber nicht.

Stevie 19. Okt 2004 15:36

Re: wie installierten Dienst starten?
 
Mist, dann wüsst ich auch keinen anderen Weg, als das Teil über den net-Befehl zu starten, aber mach dir doch ne Batch-Datei...
Code:
dienst.exe /install /silent
net start dienst


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Seite 1 von 2  1 2      

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