![]() |
Dienst installieren?
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 ![]() 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) |
Re: Dienst installieren?
der Parameter ist richtig wenn es sich um eine Serviceanwendung (abgeleitet von TService) handelt.
|
Re: Dienst installieren?
Ja ist von TService abgeleitet.
Hier ist der Quellcode:(damit 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. |
Re: Dienst installieren?
Hallo,
und was passiert, wenn Du den Dienst nicht aus Delphi heraus sondern aus einem Kommandozeilenfenster installierst? Klaus |
Re: Dienst installieren?
ein Showmessage im ServicePause etc.? Man müsste dich schlagen. Ein Service besitzt im Normallfall keinen Desktop womit du auch keine dieser Messages siehst!
|
Re: Dienst installieren?
Zitat:
Ein Service kann nichts auf dem Desktop ausgeben. Du musst Deine "Debug-Infos" in ein logfile schreiben. |
Re: Dienst installieren?
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:
Diese Code erzeugt den Registry Eintrag "Description" an folgender Stelle:
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; 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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