AGB  ·  Datenschutz  ·  Impressum  







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

Dienst installieren?

Ein Thema von 1ceman · begonnen am 26. Nov 2007 · letzter Beitrag vom 27. Nov 2007
Antwort Antwort
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#1

Dienst installieren?

  Alt 26. Nov 2007, 13:12
Ich hab angefangen mir einen dienst zu schreiben, der wenn er login daten vom server zugesendet bekommt,
diese Daten für nen Autologin in die registry schreibt und den pc dann neustartet.
Aber irgendwie bekomme ich den dienst noch nichtmal installiert. Hab zum testen erstmal diesen Dienst aus dem
Beispiel von MaBuSE genommen.
Dann habe ich in Delphi 7 den Parameter /install eingestellt und gestartet, es passiert aber nix, der dienst wird auch
unter Systemsteuerung->Verwaltung->Dienste nicht aufgeführt.
Ist das mit dem Parameter überhaupt richtig oder muss man den dienst anders installieren??

Mfg,
1ceman

//EDIT: Namen vom Autor des Bsp. geändert (hattte den falschen genommen sry)
Roman
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dienst installieren?

  Alt 26. Nov 2007, 13:19
der Parameter ist richtig wenn es sich um eine Serviceanwendung (abgeleitet von TService) handelt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#3

Re: Dienst installieren?

  Alt 26. Nov 2007, 13:45
Ja ist von TService abgeleitet.
Hier ist der Quellcodedamit ihr nicht zwangsläufig auf den link vom bsp. gehen müsst)
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TService1 = class(TService)
    procedure ServiceAfterInstall(Sender: TService);
    procedure ServiceAfterUninstall(Sender: TService);
    procedure ServiceBeforeInstall(Sender: TService);
    procedure ServiceBeforeUninstall(Sender: TService);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceDestroy(Sender: TObject);
    procedure ServiceExecute(Sender: TService);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
    procedure ServiceShutdown(Sender: TService);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: 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.ServiceAfterInstall(Sender: TService);
begin
  showMessage('AfterInstall');
end;

procedure TService1.ServiceAfterUninstall(Sender: TService);
begin
  showMessage('AfterUninstall');
end;

procedure TService1.ServiceBeforeInstall(Sender: TService);
begin
  showMessage('BeforeInstall');
end;

procedure TService1.ServiceBeforeUninstall(Sender: TService);
begin
  showMessage('BeforeUninstall');
end;

procedure TService1.ServiceContinue(Sender: TService;
  var Continued: Boolean);
begin
  showMessage('OnContinue');
  Continued := True;
end;

procedure TService1.ServiceCreate(Sender: TObject);
begin
  showMessage('OnCreate');
end;

procedure TService1.ServiceDestroy(Sender: TObject);
begin
  showMessage('OnDestroy');
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.ServicePause(Sender: TService; var Paused: Boolean);
begin
  showMessage('OnPause');
  Paused := True;
end;

procedure TService1.ServiceShutdown(Sender: TService);
begin
  showMessage('OnShutdown');
end;

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

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  showMessage('OnStop');
  Stopped := True;
end;

end.
Roman
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#4

Re: Dienst installieren?

  Alt 26. Nov 2007, 13:49
Hallo,

und was passiert, wenn Du den Dienst nicht aus Delphi heraus sondern aus einem Kommandozeilenfenster installierst?

Klaus
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Dienst installieren?

  Alt 26. Nov 2007, 14:02
ein Showmessage im ServicePause etc.? Man müsste dich schlagen. Ein Service besitzt im Normallfall keinen Desktop womit du auch keine dieser Messages siehst!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Dienst installieren?

  Alt 26. Nov 2007, 14:16
Zitat von SirThornberry:
ein Showmessage im ServicePause etc.? Man müsste dich schlagen. Ein Service besitzt im Normallfall keinen Desktop womit du auch keine dieser Messages siehst!
Ich würde als erstes alle ShowMessage rausmachen.
Ein Service kann nichts auf dem Desktop ausgeben.

Du musst Deine "Debug-Infos" in ein logfile schreiben.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#7

Re: Dienst installieren?

  Alt 27. Nov 2007, 09:52
So hab den Dienst nochmal komplett neu geschrieben.
Jetzt kann ich ihn immerhin schonmal installieren. Wird auch bei meine diensten angezeigt
und ich kann ihn starten. Jetzt hab ich folgenden Code genommen, um meinem Dienst ne beschreibung
zu geben.
Delphi-Quellcode:
procedure TService1.ServiceAfterInstall(Sender: TService);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
    begin
      Reg.WriteString('Description', 'This is a description for my fine Service Application.');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;
Diese Code erzeugt den Registry Eintrag "Description" an folgender Stelle:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\MeinService

Das Problem ist allerdings, dass kein registry-Eintrag erstellt wird, sprich der Dienst hat keine Beschreibung.
Hat jm ne Idee warum er das nicht macht?

@RavenIV: Ich werd das mit dem LogFile mal versuchen.

Mfg
1ceman

//Edit: Also hab mein Problem gefunden, hatte die procedure nur von hand eingetippt. Nachdem ich im Objekt Inspector unter Events auf ServiceAfterinstall geklikt habe, funktioniert die alles ohne Probleme.
Roman
  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 00:52 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