Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einem Dienst eine Erklärung für die MMC mitgeben (https://www.delphipraxis.net/122882-einem-dienst-eine-erklaerung-fuer-die-mmc-mitgeben.html)

emsländer 23. Okt 2008 19:28


Einem Dienst eine Erklärung für die MMC mitgeben
 
Salvete,

so - nun wohl die letzte Geschichte zum Thema Serviceinstaller...

Wenn ich mir die MMC-Dienstekonsole anschaue, so finde ich dort zu allen Diensten eine kurze Anleitung. Leider finde ich keine Möglichkeit bei eigenen Diensten auch eine kurze Erklärung mitzugeben. - Oder weiss da jemand was? :?:

Gruss

EL

SvB 23. Okt 2008 19:49

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
Das funktioniert so
Delphi-Quellcode:
uses WinSvc;
const
  SERVICE_CONFIG_DESCRIPTION    = 1;
  SERVICE_CONFIG_FAILURE_ACTIONS = 2;

type
  TSERVICE_DESCRIPTION = packed record
    lpDescription: PChar;
  end;

  function ChangeServiceConfig2A(hService: HWND; dwInfoLevel: DWord; lpInfo: Pointer): BOOL; stdcall; external 'advapi32.dll';

implementation

procedure SetServiceDescription(ServiceName, Description: String);
var
  lDescription   : TSERVICE_DESCRIPTION;
  lManager,
  lServiceHandle : Cardinal;
begin
  lManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if (lManager <> 0) then
  begin
    lServiceHandle := OpenService(lManager, PAnsiChar(ServiceName) , SERVICE_ALL_ACCESS);
    if (lServiceHandle <> 0) then
    begin
      lDescription.lpDescription := PAnsiChar(Description);
      ChangeServiceConfig2A(lServiceHandle, SERVICE_CONFIG_DESCRIPTION, @lDescription);
      CloseServiceHandle(lServiceHandle);
    end;
    CloseServiceHandle(lManager);
  end;
end;
Ich hoffe, dass ich nichts vergessen habe.
Die Funktion "SetServiceDescription" musst Du natürlich auch nocj irgendwo definieren.

Grüße Sven

SirThornberry 23. Okt 2008 19:51

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
Der Standardservice bietet keine Möglichkeit eine Beschreibung anzugeben. Diese habe ich bisher daher über die Apifunktion selbst gesetzt:
Delphi-Quellcode:
[...]
const
  SERVICE_CONFIG_DESCRIPTION    = 1;

type
  TSERVICE_DESCRIPTION = packed record
    lpDescription: PChar;
  end;
[...]
  function ChangeServiceConfig2A(hService: HWND; dwInfoLevel: DWord; lpInfo: Pointer): BOOL; stdcall; external 'advapi32.dll';
[...]
procedure TYourServiceClass.ServiceAfterInstall(Sender: TService);
var
  lDescription   : TSERVICE_DESCRIPTION;
  lManager,
  lServiceHandle : Cardinal;
begin
  lManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if (lManager <> 0) then
  begin
    lServiceHandle := OpenService(lManager, PChar(Self.Name), SERVICE_ALL_ACCESS);
    if (lServiceHandle <> 0) then
    begin
      lDescription.lpDescription := 'Deine Beschreibung';
      ChangeServiceConfig2A(lServiceHandle, SERVICE_CONFIG_DESCRIPTION, @lDescription);
      CloseServiceHandle(lServiceHandle);
    end;
    CloseServiceHandle(lManager);
  end;
end;
@SvB: Woher hast du den Quelltext? Der sieht ja 1 zu 1 aus wie der aus meinem Projekt.

SvB 23. Okt 2008 20:09

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
@SirThornberry:
Ich hatte gerade meine VM mit Delphi runtergefahren und wollte alles ausmachen, dann hab ich es aber noch mal angeschmissen.
Ich musste mich vor ca. zwei Monaten mal mit Services auseinandersetzen und es müsste von diesem Beitrag gewesen sein. Zum Glück hatte ich mir die URL in den Quelltext eingetragen, sonst hätte ich es jetzt nicht mehr gewusst, bzw. rausbekommen.Wie erstelle ich einen Dienst für WinNT / Win2000 / Win. Auf der ersten Seite ganz unten. Das Beispiel war von Dir.
Ich habs für mich noch mal etwas angepasst.

Dankeschön noch mal.

Grüße Sven

SirThornberry 23. Okt 2008 20:13

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
:) Und ich dachte schon ich bin im falschen Film und hab den unterbewusst selbst irgendwo aufgesammelt *g*

emsländer 23. Okt 2008 20:18

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
Zitat:

Zitat von SirThornberry
Der Standardservice bietet keine Möglichkeit eine Beschreibung anzugeben. Diese habe ich bisher daher über die Apifunktion selbst gesetzt:
Delphi-Quellcode:
[...]
const
  SERVICE_CONFIG_DESCRIPTION    = 1;

type
  TSERVICE_DESCRIPTION = packed record
    lpDescription: PChar;
  end;
[...]
  function ChangeServiceConfig2A(hService: HWND; dwInfoLevel: DWord; lpInfo: Pointer): BOOL; stdcall; external 'advapi32.dll';
[...]
procedure TYourServiceClass.ServiceAfterInstall(Sender: TService);
var
  lDescription   : TSERVICE_DESCRIPTION;
  lManager,
  lServiceHandle : Cardinal;
begin
  lManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if (lManager <> 0) then
  begin
    lServiceHandle := OpenService(lManager, PChar(Self.Name), SERVICE_ALL_ACCESS);
    if (lServiceHandle <> 0) then
    begin
      lDescription.lpDescription := 'Deine Beschreibung';
      ChangeServiceConfig2A(lServiceHandle, SERVICE_CONFIG_DESCRIPTION, @lDescription);
      CloseServiceHandle(lServiceHandle);
    end;
    CloseServiceHandle(lManager);
  end;
end;
@SvB: Woher hast du den Quelltext? Der sieht ja 1 zu 1 aus wie der aus meinem Projekt.

Hi,

vielen Dank. Verrätst Du mir auch noch, welche Unit ich für "OpenSCManager" etc. einbinden muss?

Gruss

EL

SvB 23. Okt 2008 20:23

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
Ich denke, wie ich es bei mir mit reingeschrieben habe: WinSvc

emsländer 23. Okt 2008 20:24

Re: Einem Dienst eine Erklärung für die MMC mitgeben
 
Zitat:

Zitat von SvB
Ich denke, wie ich es bei mir mit reingeschrieben habe: WinSvc

Das wars!!!!

Super - vielen Dank!

Gruss

EL


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