![]() |
Service Beschreibung aus dessen Namen
Gibt es eine Möglichkeit, den Beschreibungstext eines Win32 Service anhand seines eindeutigem Namens auszulesen?
|
Re: Service Beschreibung aus dessen Namen
meinst du den Namen oder Displaynamen
|
Re: Service Beschreibung aus dessen Namen
Ja
|
Re: Service Beschreibung aus dessen Namen
Sehr geschickt auf eine Oder-Farge mit "ja" zu antworten. :mrgreen: Aber ich dachte, du wolltest den Beschreibungstext? Muss mal gucken, ob ich da was finde.
Guck mal hier: ![]() |
Re: Service Beschreibung aus dessen Namen
die gesuchte Funktion heißt: QueryServiceConfig2
@Luckie, bei dem source von dir kann ichs nicht finden. Die Beschreibung eines Services anhand des Namen zu setzen geht so:
Delphi-Quellcode:
auslesen geht dann ähnlich, musst eben nur die Zeile "ChangeServiceConfig2A(..." sowie die vorherige zeile und dafür die andere Funktion einsetzen.
const
SERVICE_CONFIG_DESCRIPTION = 1; type TSERVICE_DESCRIPTION = packed record lpDescription: PChar; end; [...] 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 := 'Erlaubt Login erst nach einlegen der richtigen CD.'; ChangeServiceConfig2A(lServiceHandle, SERVICE_CONFIG_DESCRIPTION, @lDescription); CloseServiceHandle(lServiceHandle); end; CloseServiceHandle(lManager); end; end; |
Re: Service Beschreibung aus dessen Namen
Mein Code war ja nur als Ansatz gedacht.
|
Re: Service Beschreibung aus dessen Namen
achso :-D (OT: Toller ModThread)
|
Re: Service Beschreibung aus dessen Namen
Zitat:
Sorry, meinte eigentlich den Displayname. Es gibt wohl die API Funktion GetServiceDisplayName zu dem Zweck. Aber folgender Code schmeisst mír eine Access Violoation um die Ohren. Ich hab immer wieder die Probleme mit PChar und Konsorten. Es bedarf wohl nur einer kleinen Änderung, oder ?
Delphi-Quellcode:
function ServiceGetDisplayname (sMachine, sService: string) : string ;
var SCManHandle, SvcHandle: SC_Handle; SS: TServiceStatus; dwStat: DWORD; ok : boolean ; sDisplayname : PChar ; L : cardinal ; begin dwStat := 0; // Open service manager handle. SCManHandle := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT); if (SCManHandle > 0) then begin ok := GetServiceDisplayName (SCManHandle,PChar(sService), sDisplayname, L) ; CloseServiceHandle(SvcHandle); Result := String(sDisplayname) ; end else Result := '' ; end; |
Re: Service Beschreibung aus dessen Namen
Du musst auch Speicher anfordnern:
Delphi-Quellcode:
Ich habe die Funktion auch gleich noch mal etwas umgeschrieben, damit eine einfachere Fehlerbehandlung möglich wird.
uses
WinSvc; function ServiceGetDisplayname(sMachine, sService: string; var DisplayName: string): Boolean; var ret : Boolean; SCManHandle : SC_Handle; Buffer : PChar; len : cardinal; begin ret := False; len := 0; SCManHandle := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT); if (SCManHandle > 0) then begin GetServiceDisplayName(SCManHandle, PChar(sService), nil, len); if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin len := len + 1; GetMem(Buffer, len); ret := GetServiceDisplayName(SCManHandle, PChar(sService), Buffer, len); DisplayName := string(Buffer); FreeMem(Buffer); end; CloseServiceHandle(SCManHandle); end; Result := ret; end; procedure TForm1.Button1Click(Sender: TObject); var Displayname : string; begin if ServiceGetDisplayname('', 'NetLogon', Displayname) then ShowMessage(Displayname) else ShowMessage(SysErrorMessage(GetLastError)); end; |
Re: Service Beschreibung aus dessen Namen
Danke Luckie... Klappt wunderbar.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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