Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie eine Beschreibung für TService erzeugen (https://www.delphipraxis.net/39789-wie-eine-beschreibung-fuer-tservice-erzeugen.html)

manuel 7. Feb 2005 18:57


Wie eine Beschreibung für TService erzeugen
 
Hi Leute,

ich habe einen Dienst unter Verwendung der Komponente TService erstellt.
Jetzt möchte ich, dass in der Windows-Anzeige "Dienste" auch eine Beschreibubg zum Dienst zu sehen ist. Leider gibts zu TService keine Property "Description" oder so.

Hat jemand vielleicht eine Idee ?


Gruß

Manuel

Sprint 8. Feb 2005 03:39

Re: Wie eine Beschreibung für TService erzeugen
 
Ich kenne keine VCL Funktion. Kannst du aber manuell nachdem Ereignis AfterInstall selber in die Registry schreiben.
Delphi-Quellcode:
procedure TService1.ServiceAfterInstall(Sender: TService);
begin

  with TRegistry.Create(KEY_READ or KEY_WRITE) do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey('SYSTEM\CurrentControlSet\Services\' + Name, False) then
        WriteString('Description', 'Meine Beschreibung');
    finally
      Free;
    end;

end;

Chewie 8. Feb 2005 16:00

Re: Wie eine Beschreibung für TService erzeugen
 
Ich würde empfehlen, den dokumentierten Weg zu nehmen, und das ist die Verwendung von MSDN-Library durchsuchenChangeServiceConfig2


Hier ein Auszug aus einer Klasse, die ich mal geschrieben habe:

Delphi-Quellcode:
procedure TServiceInstaller.SetDescription(const Value: String);
var
  sd: TServiceDescription;
begin
  if FServiceOpened then
  begin
    sd.lpDescription := PChar(Value);
    ChangeServiceConfig2(FhService, SERVICE_CONFIG_DESCRIPTION, @sd);
    FDescription := Value;
  end;
end;
FhService ist hier das Handle des geöffneten Dienstes.


Eventuell musst du dir noch die Funktionsdeklaration und den Typ TServiceDescription importieren:

Delphi-Quellcode:
unit Winscv_fragment;

interface

uses Winsvc, Windows;

function ChangeServiceConfig2A(hService: SC_HANDLE; dwInfoLevel: DWord;
  lpInfo: Pointer): BOOL; stdcall;
function ChangeServiceConfig2W(hService: SC_HANDLE; dwInfoLevel: DWord;
  lpInfo: Pointer): BOOL; stdcall;
function ChangeServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWord;
  lpInfo: Pointer): BOOL; stdcall;

type
  _SERVICE_DESCRIPTIONA = packed record
    lpDescription: PChar;
  end;
  TServiceDescriptionA = _SERVICE_DESCRIPTIONA;
  PServiceDescriptionA = ^TServiceDescriptionA;

  _SERVICE_DESCRIPTIONW = packed record
    lpDescription: PWChar;
  end;
  TServiceDescriptionW = _SERVICE_DESCRIPTIONW;
  PServiceDescriptionW = ^TServiceDescriptionW;

  //we use the ANSI version
  TServiceDescription = TServiceDescriptionA;

const
  SERVICE_CONFIG_DESCRIPTION    = 1;
  SERVICE_CONFIG_FAILURE_ACTIONS = 2;

implementation

function ChangeServiceConfig2A; external advapi32 name 'ChangeServiceConfig2A';
function ChangeServiceConfig2W; external advapi32 name 'ChangeServiceConfig2W';
function ChangeServiceConfig2; external advapi32 name 'ChangeServiceConfig2A';

end.

Sprint 8. Feb 2005 16:26

Re: Wie eine Beschreibung für TService erzeugen
 
Zitat:

Zitat von Chewie
Ich würde empfehlen, den dokumentierten Weg zu nehmen, und das ist die Verwendung von ChangeServiceConfig2

Nach meinen Erfahrungen funktioniert das nicht unter Windows NT 4.

sakura 8. Feb 2005 16:30

Re: Wie eine Beschreibung für TService erzeugen
 
Zitat:

Zitat von Sprint
Nach meinen Erfahrungen funktioniert das nicht unter Windows NT 4.

Korrekt, aber in WinNT4 gibt es auch keine Anzeigen dafür :mrgreen: Das muss man dann wieder separat abfangen.

...:cat:...

Sprint 8. Feb 2005 16:46

Re: Wie eine Beschreibung für TService erzeugen
 
Zitat:

Zitat von sakura
Korrekt, aber in WinNT4 gibt es auch keine Anzeigen dafür [...]

Das Problem liegt ja bei...
Zitat:

Delphi-Quellcode:
function ChangeServiceConfig2A; external advapi32 name 'ChangeServiceConfig2A';
function ChangeServiceConfig2W; external advapi32 name 'ChangeServiceConfig2W';
function ChangeServiceConfig2; external advapi32 name 'ChangeServiceConfig2A';

Wenn diese Funktionen statisch gelinkt sind, kann der Service nicht unter Windows NT 4 gestartet werden. Also wäre es besser, diese Funktionen dynamisch zu linken. :wink:

manuel 8. Feb 2005 17:16

Re: Wie eine Beschreibung für TService erzeugen
 
Also erstmal danke für die vielen Antworten. :thumb:

Der Service wird nicht in NT 4 Umgebungen genutzt werden. Daher ist dieses Problem schon mal aussen vor. Die beiden anderen Lösungen werd ich gleich ausprobieren...

Gruß

Manuel

BennyM 16. Feb 2005 09:46

Re: Wie eine Beschreibung für TService erzeugen
 
Hallo,
also kann man sagen am besten ist, man schreibts direkt in die registry dann funktionierts immer ...

sakura 16. Feb 2005 09:48

Re: Wie eine Beschreibung für TService erzeugen
 
Zitat:

Zitat von BennyM
Hallo,
also kann man sagen am besten ist, man schreibts direkt in die registry dann funktionierts immer ...

Zur Zeit, als bis einschl. Windows 2003, ja. Aber falls sich der Speicherort mal ändern sollte, dann ist die andere Lösung näturlich besser. Wenn das Wörtchen wenn nicht wär...

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 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